A Guide to Concurrency, Communication, and Multithreading by Kay.
Concurrency refers to the sharing of resources in the same time frame.
Incorrect handling of concurrency can lead to programs which fail for no apparent reason, even with the same input for which they previously seemed to work perfectly. Operating systems manage shared resources, and in the past programmers could allow the operating system to handle all aspects of concurrency. This is no longer the case for today's complex programs, which need to run efficiently and robustly on modern computers. Multiprocessor machines on the desktop and distributed systems are examples of architectures in which concurrency control takes on new and important meaning for systems designers. This chapter introduces the subject of concurrency and provides guidelines for programming on Unix systems in a concurrent environment.