java - Cas操作会加锁吗
怪我咯
怪我咯 2017-04-18 10:52:40
0
1
725

问题:
(1)不需要cas操作来加锁和解锁,这个怎么理解??cas操作不是如果比较不成功那么就一直尝试吗?和加锁有什么关系??这个该如何理解

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(1)
刘奇

Les opérations de comparaison et d'échange peuvent ne pas nécessiter de verrous, selon la plate-forme, mais la plupart des plates-formes prennent en charge les cas sans verrouillage. Le verrou le plus simple est un verrou tournant implémenté via test et set. Bien sûr, il peut également être implémenté via cas.

Spin Lock continuera en effet à essayer lorsque le verrouillage échoue, épuisant les ressources du processeur. Comme

while (flag.test_and_set()) { /* yield; */ } // 上锁
flag.clear(); // 解锁

Le verrou fourni par l'interface système suspendra généralement le thread lorsque le verrou échoue, comme

while (flag.test_and_set()) { flag.wait_for_unlock_signal(); } // 上锁

Le wait_for_unlock_signal() ici est une fonction imaginaire. Mais le verrouillage repose toujours sur des opérations atomiques comme cas. En d’autres termes, les verrous sont désormais implémentés via certaines opérations atomiques de base, telles que tester et définir, comparer et échanger.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal