Dalam program berbilang benang, C++ menggunakan kunci mutex dan jenis atom untuk memastikan akses yang betul bagi benang kepada sumber yang dikongsi. Kunci Mutex: Kelas std::mutex mencipta kunci mutex, membenarkan hanya satu utas mengakses sumber kongsi pada satu masa, menghalang perlumbaan data. Jenis atom: std::atomic
Pengaturcaraan Serentak C++: Mengurus Peruntukan Sumber dalam Benang Selari
Dalam pengaturcaraan berbilang benang, mengurus peruntukan sumber adalah penting untuk mengelakkan perlumbaan data dan memastikan ketepatan program. C++ menyediakan beberapa mekanisme penyegerakan untuk melaksanakan peruntukan sumber, termasuk kunci mutex dan jenis atom.
1. Kunci Mutex
Kunci mutex ialah mekanisme penyegerakan yang membenarkan hanya satu utas mengakses sumber yang dikongsi pada satu masa. Dalam C++, anda boleh menggunakan kelas std::mutex
untuk mencipta kunci mutex. std::mutex
类来创建互斥锁。
代码范例:
std::mutex mtx; void thread_function() { std::lock_guard<std::mutex> guard(mtx); // 对共享资源进行操作 }
在这个示例中,std::lock_guard
是一个RAII(资源获取即初始化)包装器,它在函数作用域的生存期内锁定互斥锁。
2. 原子类型
原子类型是线程安全的内置类型,可以执行原子操作。它们防止多个线程同时修改同一个变量,从而避免数据竞争。C++标准库提供了一些原子类型,如std::atomic<T>
Contoh Kod:
std::atomic<int> counter; void thread_function() { counter++; // 执行原子增量操作 }
std::lock_guard
ialah pembalut RAII (Resource Acquisition i.e. Initialization) yang mengunci mutex untuk seumur hidup Lock skop fungsi. 2. Jenis atom
Jenis atom ialah jenis terbina dalam selamat benang yang boleh melakukan operasi atom. Mereka menghalang berbilang benang daripada mengubah suai pembolehubah yang sama pada masa yang sama, dengan itu mengelakkan perlumbaan data. Pustaka standard C++ menyediakan beberapa jenis atom, sepertistd::atomic<T>
. Contoh Kod:
std::mutex mtx; std::queue<int> queue; void producer_thread() { while (true) { std::lock_guard<std::mutex> guard(mtx); queue.push(rand()); } } void consumer_thread() { while (true) { std::lock_guard<std::mutex> guard(mtx); if (!queue.empty()) { std::cout << queue.front() << std::endl; queue.pop(); } } } int main() { std::thread t1(producer_thread); std::thread t2(consumer_thread); t1.join(); t2.join(); return 0; }
Atas ialah kandungan terperinci Pengaturcaraan Serentak C++: Bagaimana untuk menguruskan peruntukan sumber dalam benang selari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!