Mutex, Take 3 (for "dumb" futex)
"Alexander Terekhov" <[email protected]> Sat, 25 Oct 2003 22:59:20 +0200
| Newsgroups | gmane.comp.lib.phil |
|---|---|
| Message-ID | <OFFF4AA7C7.FD6F764E-ONC1256DCA.0070B705-C1256DCA.00734543@de.ibm.com> |
http://people.redhat.com/drepper/futex.pdf
("Mutex, Take 1" ... "Mutex, Take 2")
struct Mutex_Take_3 { // for "dumb" futex
futex lock; // 0: free, 1: locked, 3: contention
void lock() {
if (lock.atomic_bit_test_set(1))
while (lock == 3 || lock.atomic_exchange(3))
lock.wait(3);
}
void unlock() {
if (lock.atomic_exchange(0) == 3)
lock.wake(1);
}
}; // no CAS (long live "dumb" 386)
;-)
regards,
alexander.