Un verrou tournant est un verrou léger utilisé pour protéger les ressources partagées. Il obtient l'état du verrou en l'interrogeant en permanence pour éviter le changement de contexte. Les avantages incluent une efficacité, une réactivité et une évolutivité élevées, mais les inconvénients sont que cela peut entraîner un gaspillage de processeur et ne convient pas aux situations de verrouillage à long terme.
Un verrou tournant est un verrou léger qui est utilisé lorsqu'un thread tente d'accéder à une ressource partagée. Il évite le contexte en interrogeant toujours l'état du verrou. changer.
Le principe de fonctionnement du spin lock est le suivant : lorsqu'un thread tente d'acquérir le verrou, il vérifie en permanence l'état du verrou. Si le verrou est libéré, le thread l'acquiert immédiatement. Si le verrou a été acquis par un autre thread, le thread continuera à interroger l'état du verrou jusqu'à ce qu'il soit libéré.
L'exemple de code suivant montre comment utiliser std::atomic<bool>
en C++ pour implémenter un verrou tournant :
#include <atomic> class Spinlock { private: std::atomic<bool> locked; public: Spinlock() : locked(false) {} void lock() { while (locked.exchange(true)) { /* 旋转直到锁被释放 */ } } void unlock() { locked.store(false); } }; int main() { Spinlock lock; // 创建多个线程来争用锁 std::vector<std::thread> threads; for (int i = 0; i < 10; i++) { threads.push_back(std::thread([&lock] { lock.lock(); // 访问共享资源 lock.unlock(); })); } // 等待所有线程完成 for (std::thread& thread : threads) { thread.join(); } return 0; }
Un verrou tournant est une puissante primitive de synchronisation qui peut être utilisée dans les programmes C++ multithread Protéger les partages ressources. Cependant, ils peuvent entraîner un gaspillage du processeur lorsque les verrous sont fréquemment contestés. Il convient donc d'être prudent lors de leur utilisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!