[so2] [Curs5] Neclaritate - Cedarea unui spinlock de tip MCS

Elena Mihailescu elenamihailescu22 at gmail.com
Mon Apr 3 18:39:14 EEST 2017


Salut,

Nu imi este foarte clar codul ce se execută atunci când un procesor cedează
un spinlock de tip MCS. (Curs 5, slide 28 [1])

Mai exact, nu îmi este clar de ce face acel while (!(next = node->next)) în
următoarea secvență de cod:

next = node->next;

if (!next){

if (cmpxchg(lock, node, NULL) == node) return;

while (!(next = node->next)) ;

}
next->locked = 1; /* pass access to the first CPU waiting */

Din ce înteleg de aici [2], se ajunge la bucata respectivă de cod dacă
există și alt procesor care așteaptă după lock, caz în care procesorul
curent "cedează" lock-ul următorului procesor care așteaptă în coadă.
Mă gândesc că acea secvență de cod se execută doar când un alt procesor
încearcă să ia lock-ul și este adăugat în listă (cazul 2, slide 27 [1])
concomitent cu eliberarea lock-ului de către primul, doar că nu înțeleg
care e rolul și ce verifică mai exact acel while.

Mersi frumos,
Elena

[1] https://ocw.cs.pub.ro/courses/so2/cursuri/curs05
[2] https://lwn.net/Articles/590243/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20170403/6aa75a98/attachment.html>


More information about the so2 mailing list