parallel computing the activity of computer must include the proper reacting to possibly great variety of messages that can be sent to it at unpredictable momentsa situation which occurs in all information systems in which number of computers are coupled to each other -"cooperating sequential processes, dijkstra parallel computation has become increasingly common for examplelaptops and desktops come with multiple processors which communicate through shared memory high-end computation is often done using clusters consisting of individual computers communicating through network parallelism provides number of benefitshigh performance--more processors working on task (usuallymeans it is completed faster better use of resources-- program can execute while another waits on the disk or network fairness--letting different users or programs share machine rather than have one program run at time to completion convenience--it is often conceptually more straightforward to do task using set of concurrent programs for the subtasks rather than have single program manage all the subtasks fault tolerance--if machine fails in cluster that is serving web pagesthe others can take over concrete applications of parallel computing include graphical user interfaces (gui( dedicated thread handles ui actions while other threads arefor examplebusy doing network communication and passing results to the ui threadresulting in increased responsiveness)java virtual machines ( separate thread handles garbage collection which would otherwise lead to blockingwhile another thread is busy running the user code)web servers ( single logical thread handles single client request)scientific computing ( large matrix multiplication can be split across cluster)and web search (multiple machines crawlindexand retrieve web pagesthe two primary models for parallel computation are the shared memory modelin which each processor can access any location in memoryand the distributed memory modelin which processor must explicitly send message to another processor to access its memory the former is more appropriate in the multicore setting and the latter is more accurate for cluster the questions in this are focused on the shared memory model writing correct parallel programs is challenging because of the subtle interactions between parallel components one of the key challenges is races--two concurrent instruction sequences access the same address in memory and at least one of them writes to that address other challenges to correctness are starvation ( processor needs resource but never gets it)deadlock (thread acquires lock and thread acquires lock following which tries to acquire and tries to acquire )and