Kunci putaran ialah kunci ringan yang digunakan untuk melindungi sumber yang dikongsi. Ia memperoleh status kunci dengan mengundinya secara berterusan untuk mengelakkan penukaran konteks. Kelebihannya termasuk kecekapan tinggi, responsif dan kebolehskalaan, tetapi kelemahannya ialah ia boleh menyebabkan pembaziran CPU dan tidak sesuai untuk situasi penguncian jangka panjang.
Kunci putaran ialah kunci ringan yang digunakan apabila utas cuba mengakses sumber yang dikongsi dengan mengelak konteks dengan sentiasa meninjau status kunci. suis.
Prinsip kerja kunci putaran ialah: apabila benang cuba memperoleh kunci, ia akan menyemak status kunci secara berterusan. Jika kunci dilepaskan, benang memperolehnya dengan serta-merta. Jika kunci telah diperolehi oleh utas lain, utas akan terus meninjau status kunci sehingga ia dikeluarkan.
Contoh kod berikut menunjukkan cara menggunakan std::atomic<bool>
dalam C++ untuk melaksanakan kunci putaran:
#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; }
Kunci putaran ialah primitif penyegerakan berkuasa yang boleh digunakan dalam program perkongsian C++ berbilang benang sumber. Walau bagaimanapun, ia boleh menyebabkan pembaziran CPU apabila kunci sering dipertikaikan, jadi berhati-hati diperlukan apabila menggunakannya.
Atas ialah kandungan terperinci Apakah peranan spinlock dalam pengaturcaraan berbilang benang C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!