[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