[OSy] Atomicky test and set

Vlastimil Babka babka at dsrg.mff.cuni.cz
Sat Nov 22 19:25:21 CET 2008


Martin Suchan wrote:

Dobry vecer,

> 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.

Zkousel jste se divat jak je to treba v Linuxovem kernelu? 
(asm-mips/spinlock.h).

> 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?

U cond variable je to proto aby na to docasne odemceni mutexu mohli 
reagovat ostatni. V ostatnich pripadech takovy duvod neni, takze to neni 
nutne. V pripadech, kdy by to bylo vhodne, muze takove vlakno zavolat 
yield nasledne rucne.

> 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.)

Ano, jen je treba dat pozor aby vzbuzene vlakno opravdu mutex dostalo (a 
ne napriklad zrovna timeoutovalo) aby pak nezustal zamceny naporad.

Vlastimil Babka





More information about the NSWI004 mailing list