[OSy] Atomicky test and set

Martin Suchan martin.suchan at gmail.com
Sat Nov 22 17:02:06 CET 2008


Zdravim,
chtel bych se zeptat, zda by se nekdo nepodelil o assemblerovskou
implementaci atomicke funkce "test and set", ktera je nezbytna pro
fungovani spinlocku a i dalsich sychronizacnicich primitiv. Bohuzel z
assembleru znam jen mizive informace a studovat manual kvuli jedne/par
funkcim se mi zda trochu moc.

Zrejme se bude jednat o dobrou kombinaci instrukci Load linked a Store
conditional, nevim ale, jak mezi ne vlozit test na nenulovost var a
jump mimo, kdyz je gtz + druhou vetev prirazeni a test, zda mi do toho
nikdo nevstoupil. Nevim, co ma kazda funkce za sideeffecty a v jakem
poradi/kombinaci je lze zapsat spravne za sebou, aby delali to, co
maji.


A jeste bych mel dotazy, u cond variable se ma vlakno pri timeout 0 a
neuspechu pred opetovnym zamcenim mutexu aspon jednou vzdat procesoru.
Ma se (doporucuje se) takto vzdavat i u dalsich timeout funkci, jako
thread_join_timeout, mutex_lock_timeout, semaphore_down_timeout?

Dale pri odemceni mutexu se maji probudit vsechna zablokovana vlakna,
neni rozumnejsi odblokovat jen jedno, kdyz zamek muze vlastnit jen
jedno? (Jina situace bude asi u rwlocku, kdy se odemyka write zamek a
cekaji na odemceni read vlakna.)


Diky
S pozdravem Martin Suchan




More information about the NSWI004 mailing list