Dalam pengaturcaraan berbilang benang C++, mekanisme penyegerakan benang adalah penting Terdapat tiga jenis utama: Mutex (Mutex): digunakan untuk melindungi akses eksklusif kepada sumber yang dikongsi. Pembolehubah Keadaan: Digunakan untuk memberitahu urutan bahawa syarat tertentu telah dipenuhi. Kunci Baca-Tulis: Membenarkan berbilang utas membaca data yang dikongsi pada masa yang sama, tetapi hanya satu utas boleh menulis pada satu masa.
Mekanisme penyegerakan benang dalam pengaturcaraan berbilang benang C++
Dalam pengaturcaraan berbilang benang, mekanisme penyegerakan adalah penting untuk mengelakkan perlumbaan data dan memastikan keselamatan benang. Berikut ialah beberapa mekanisme penyegerakan benang biasa dalam C++:
Mutex (Mutex)
Mutex ialah mekanisme penyegerakan peringkat rendah yang digunakan untuk melindungi akses eksklusif kepada sumber yang dikongsi. Ia membenarkan hanya satu utas untuk mengakses bahagian kritikal (blok kod yang memerlukan penyegerakan) pada satu masa.
std::mutex m; void critical_section() { std::lock_guard<std::mutex> lock(m); // 临界区代码 }
Condition Variable
Condition variable digunakan untuk memberitahu satu thread bahawa thread lain memenuhi syarat tertentu. Satu utas boleh menunggu syarat menggunakan kaedah wait()
, manakala thread lain boleh mengisyaratkannya menggunakan notify_one()
atau notify_all()
kaedah. wait()
方法等待条件,而另一个线程可以使用 notify_one()
或notify_all()
方法发出信号。
std::condition_variable cv; bool condition_met = false; void wait_for_condition() { std::unique_lock<std::mutex> lock(m); cv.wait(lock, []() { return condition_met; }); } void signal_condition() { std::lock_guard<std::mutex> lock(m); condition_met = true; cv.notify_one(); }
读写锁 (Read-Write Lock)
读写锁允许多个线程同时读取共享数据,但一次只能有一个线程写入共享数据。
std::shared_lock<std::shared_mutex> lock(m, std::shared_lock<std::shared_mutex>::defer_lock);
实战案例:共享计数器
考虑一个共享计数器,需要同时支持多个线程的增量和获取操作:
class SharedCounter { std::mutex mutex_; int count_; public: void increment() { std::lock_guard<std::mutex> lock(mutex_); ++count_; } int get() { std::lock_guard<std::mutex> lock(mutex_); return count_; } };
在这个例子中,mutex_
互斥锁用于保护 count_
变量。每个线程都可以通过 increment()
方法独立增量计数器,并且可以通过 get()
rrreee
mutex_
digunakan Untuk melindungi pembolehubah count_
. Setiap urutan boleh menambah pembilang secara bebas melalui kaedah increment()
dan boleh membaca nilai semasa melalui kaedah get()
. 🎜Atas ialah kandungan terperinci Apakah mekanisme penyegerakan benang biasa dalam pengaturcaraan berbilang benang C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!