StuBS
|
By the use of Ticketlocks, it is possible to serialize blocks of code that might run parallel on multiple CPU cores. More...
#include <ticketlock.h>
Public Member Functions | |
Ticketlock () | |
Constructor. | |
void | lock () |
Enters the critical area. In case the area is already locked, lock() will actively wait for the area can be entered. | |
void | unlock () |
Unblocks the critical area. | |
By the use of Ticketlocks, it is possible to serialize blocks of code that might run parallel on multiple CPU cores.
Synchronization is implemented using a lock and a ticket variable. Once a thread tries to enter the critical area, it obtains a ticket by atomic increment of the ticket variable and waits until the lock variable is equal to its ticket. When a thread leaves the critical area, it increments the lock variable by one and thereby allows the next thread to enter the critical area.
If you want that things just work, choose __ATOMIC_SEQ_CST as memorder. This is not the most efficient memory order but works reasonably well.