Testovat a testovat a nastavovat - Test and test-and-set - Wikipedia
v počítačová věda, testovat a nastavit procesor návod se používá k implementaci vzájemné vyloučení v víceprocesorový prostředí. I když správný zámek lze implementovat pomocí test-and-set, může to vést k spor o zdroje v zaneprázdněném zámku (způsobeno uzamčením sběrnice a zneplatněním mezipaměti, když je potřeba pro přístup k paměti test-and-set provoz atomicky ).
Ke snížení režie složitější zamykací protokol testovat a testovat a nastavovat se používá. Hlavní myšlenkou je snížit odepsat které mohou vytvořit spor o zdroje když dvě samostatná vlákna chtějí stejný zámek. Li n vlákna soutěží o zámek, pokusí se jej získat, jakmile je uvolněn, pouze pokud je používán vyzkoušet a nastavit, což způsobí, že každé vlákno zneplatní příznak zámku, což znamená, že musí být šířeno prostřednictvím mezipaměti zbývajících procesorů n krát, než jej bude moci jedno vlákno bezpečně přečíst. Přidáním výtěžek krok, pokusí se jej získat pouze první podproces provedení, který si všimne, že zámek je volný, čímž se eliminuje zpětný zápis.
booleovský uzamčeno: = false // proměnná sdíleného zámkupostup EnterCritical () { dělat { zatímco (uzamčeno == true) yield (); // zámek vypadá zaneprázdněn, takže se dá plánovači } zatímco TestAndSet (uzamčeno) // skutečné atomové blokování}postup TestAndSet (lock) {boolean initial = lock; lock = true; návrat počáteční; }
Výstupní protokol je:
postup ExitCritical () {zamknuto: = false}
Vstupní protokol využívá k normální rotaci paměti a čeká na uvolnění zámku. Test-and-set se používá pouze k pokusu o získání zámku, když normální čtení paměti říká, že je zdarma. K nákladným operacím atomové paměti tedy dochází méně často než při jednoduchém otočení kolem testu a nastavení.
Pokud programovací jazyk použité podpěry vyhodnocení zkratu, vstupní protokol lze implementovat jako:
postup EnterCritical () { zatímco (uzamčeno == true nebo TestAndSet (uzamčeno) == true) přeskočit // otáčet do uzamčení }
Upozornění
I když tohle optimalizace je užitečné v programování systému je třeba se mu na vysoké úrovni vyhnout souběžné programování pokud nejsou všechna omezení jasná a srozumitelná. Jeden příklad špatného použití je podobný idiom volala dvakrát zkontrolováno zamykání, který je nebezpečné bez zvláštních opatření a může být anti-vzor.[1]
Viz také
Reference
- ^ David Bacon a kol. Prohlášení „Dvojitě zkontrolované blokování je přerušeno“.
- Gregory R. Andrews, Základy vícevláknového, paralelního a distribuovaného programování, str. 100–101. Addison-Wesley, 2000. ISBN 0-201-35752-6.