Synchronization (computer science): Difference between revisions

Content deleted Content added
Line 76:
 
==Support in programming languages==
In [[Java (programming language)|Java]], one way to prevent thread interference and memory consistency errors, is by wrapping a block of code in a ''synchronized(someObject){...}'' section. This forces any thread to acquire the lock of the object represented by ''someObject'' before it can execute the block. The lock is automatically released when the thread which acquired the lock, and is then executing the block, leaves the block or enters the waiting state within the block. Any variable updates, made by a thread in a synchronized block, become visible to other threads when they similarly acquire the lock and execute the block. Additionally, when a method signature is prefixed with the ''synchronized'' keyword, the lock of the declaring object is used. UsingWith theseeither twoof the above implementations, any object may be used to provide the lock.
 
Java ''synchronized'' blocks, in addition to enabling mutual exclusion and memory consistency, enable signaling—i.e., sending events from threads which have acquired the lock and are executing the code block to those which are waiting for the lock within the block. Java ''synchronized'' sections therefore combine the functionality of [[Lock (computer science)|mutexes]] and [[Event (synchronization primitive)|events]]. Such a construct is known as a [[Monitor (synchronization)|synchronization monitor]].