Sabtu, 30 Desember 2017

Concurrency

Introduction to Subprogram-Level Concurrency


A task or process or thread is a program unit that can be in concurrent execution with other program units
Tasks differ from ordinary subprograms in that:
A task may be implicitly started
When a program unit starts the execution of a task, it is not necessarily suspended
When a task’s execution is completed, control may not return to the caller
Tasks usually work together


Kinds of synchronization


Cooperation: Task A must wait for task B to complete some specific activity before task A can continue its execution, e.g., the producer-consumer problem
Competition: Two or more tasks must use some resource that cannot be simultaneously used, e.g., a shared counter
Competition is usually provided by mutually exclusive access  (approaches are discussed later)    

Task Execution States


New - created but not yet started
Ready - ready to run but not currently running (no available processor)
 Running
Blocked - has been running, but cannot now continue (usually waiting for some event to occur)
Dead - no longer active in any sense



Semaphores 


Dijkstra - 1965
A semaphore is a data structure consisting of a counter and a queue for storing task descriptors
A task descriptor is a data structure that stores all of the relevant information about the execution state of the task
Semaphores can be used to implement guards on the code that accesses shared data structures
Semaphores have only two operations, wait and release (originally called P and V by Dijkstra)
Semaphores can be used to provide both competition and cooperation synchronization





Tidak ada komentar:

Posting Komentar