Rumah > Artikel > pembangunan bahagian belakang > Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++
Dalam pengaturcaraan berbilang benang C++, peranan primitif penyegerakan adalah untuk memastikan ketepatan berbilang utas yang mengakses sumber yang dikongsi Ia termasuk: Mutex (Mutex): melindungi sumber yang dikongsi dan menghalang akses serentak (Pembolehubah Keadaan) : Benang menunggu syarat tertentu untuk dipenuhi sebelum meneruskan pelaksanaan;
Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++
Dalam pengaturcaraan berbilang benang, primitif penyegerakan adalah penting, yang boleh memastikan ketepatan apabila berbilang rangkaian mengakses sumber kongsi. C++ menyediakan set primitif penyegerakan yang kaya, termasuk kunci mutex, pembolehubah keadaan dan operasi atom.
Mutex (Mutex)
Mutex ialah mekanisme penyegerakan yang digunakan untuk melindungi sumber yang dikongsi. Apabila benang memperoleh kunci mutex, benang lain akan disekat sehingga kunci mutex dilepaskan. Dalam C++, anda boleh menggunakan kelas std::mutex
untuk melaksanakan kunci mutex: std::mutex
类来实现互斥锁:
std::mutex mtx; // ... { // 获取互斥锁 std::lock_guard<std::mutex> lock(mtx); // 临界区 } // 互斥锁在离开作用域时自动释放
条件变量 (Condition Variable)
条件变量允许线程等待某个特定条件满足才继续执行。在 C++ 中,可以使用 std::condition_variable
std::condition_variable cv; // ... { std::unique_lock<std::mutex> lock(mtx); // 等待条件满足 cv.wait(lock); // 执行条件满足后要执行的代码 }
Pembolehubah Keadaan
Pembolehubah keadaan membenarkan urutan menunggu syarat tertentu dipenuhi sebelum meneruskan untuk melaksanakan. Dalam C++, anda boleh menggunakan kelasstd::condition_variable
untuk melaksanakan pembolehubah keadaan: std::atomic<int> counter; // ... counter++; // 原子地增加 counter 的值
Operasi atom
Operasi atom menjamin bahawa operasi dilaksanakan dengan cara yang tidak terganggu. Dalam C++, anda boleh menggunakan perpustakaan atom untuk melaksanakan operasi atom:std::atomic<int> counter; std::mutex mtx; // 写入线程 void write_thread() { while (true) { // 原子地增加计数器 counter++; } } // 读取线程 void read_thread() { while (true) { // 保护地读取计数器 std::lock_guard<std::mutex> lock(mtx); std::cout << "Counter: " << counter << std::endl; } } int main() { std::thread t1(write_thread); std::thread t2(read_thread); t1.join(); t2.join(); return 0; }🎜Kes praktikal🎜🎜🎜Pertimbangkan program dengan kaunter kongsi dan benang penulisan. Benang penulisan perlu menambah pembilang secara atom, manakala benang bacaan perlu membaca pembilang dengan berhati-hati: 🎜rrreee
Atas ialah kandungan terperinci Penjelasan terperinci tentang primitif penyegerakan dalam pengaturcaraan serentak C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!