Chciałem zabrać was w podróż ... Podróż, w której poznacie jak zbudowane są podstawowe bloki synchronizacji (zwane lockami), ich historię oraz działanie (przy okazji zbudujemy sobie kilka z nich). Mechanizmy które w nich zastosujemy będą wam potrzebne do zrozumienia problemu wydajnego programowania wielo-procesorowego.
12. SPINLOCK
What the name implies.
public void Acquire()
{
while (Interlocked.CompareExchange(ref locker, 1, 0) != 0)
}
public void Release()
{
Interlocked.Exchange(ref locker, 0);
}
18. MONITOR
Interface for Lock + CondVar
public void Enter() { /* take the ownership of the lock */ }
public void Exit() { /* give up ownership of the lock */ }
public void Wait() { /* release the lock, add thread1 to wait queue, sleep, acquire */ }
public void Pulse() { /* remove the waiting thread1 from wait queue */ }