Thread synchronization with semaphores
Invented by E. Dijkstra and used for the first time in the operating system, a semaphore is an abstract data type managed by the operating system, used to synchronize the access by multiple threads to shared resources and data. Essentially, a semaphore is constituted of an internal variable that identifies the number of concurrent access to a resource to which it is associated.
Also, in the threading module, the operation of a semaphore is based on the two functions acquire()
and release()
, as explained:
Whenever a thread wants to access a resource that is associated with a semaphore, it must invoke the
acquire()
operation, which decreases the internal variable of the semaphore and allows access to the resource if the value of this variable appears to be non-negative. If the value is negative, the thread would be suspended and the release of the resource by another thread will be placed on hold.Whenever a thread has finished using the data or shared resource...