C++ pengaturcaraan serentak menyediakan mekanisme kerjasama, termasuk muteks, pembolehubah keadaan, semaphore dan pembolehubah atom, untuk menyelaraskan interaksi benang dan mencegah konflik dan kebuntuan. Mekanisme ini termasuk: Mutexes: Lindungi sumber yang dikongsi, memastikan akses hanya dengan satu utas pada satu masa. Pembolehubah keadaan: Membenarkan urutan menunggu untuk syarat dipenuhi dan dimaklumkan. Semaphore: Hadkan bilangan utas yang boleh mengakses sumber yang dikongsi pada masa yang sama. Pembolehubah atom: Pastikan operasi atom pada pembolehubah yang dikongsi dan mengelakkan persaingan data.
Mekanisme kolaborasi fungsi C++ dalam pengaturcaraan serentak
Dalam pengaturcaraan serentak, mekanisme kerjasama membolehkan pelbagai fungsi berfungsi bersama tanpa konflik atau kebuntuan. C++ menyediakan pelbagai mekanisme kerjasama yang direka untuk meningkatkan skalabiliti dan kecekapan aplikasi serentak.
Mutex (Mutex)
Mutex ialah pembolehubah yang melindungi sumber kongsi daripada akses serentak. Ia memastikan bahawa hanya satu utas boleh mengakses sumber yang dilindungi dengan memperoleh dan melepaskan kunci.
std::mutex m; void thread_function() { // 获得互斥量锁 m.lock(); // 访问共享资源 // 释放互斥量锁 m.unlock(); }
Condition Variable
Condition variable digunakan untuk menunggu syarat tertentu dipenuhi. Ia boleh memberitahu urutan menunggu melalui fungsi wait()
函数等待条件变为真,也可以通过 notify_one()
或 notify_all()
.
std::condition_variable cv; std::mutex m; bool condition_met = false; void waiting_thread_function() { std::unique_lock<std::mutex> lock(m); while (!condition_met) { cv.wait(lock); } } void signalling_thread_function() { std::lock_guard<std::mutex> lock(m); condition_met = true; // 通知等待的线程 cv.notify_all(); }
Semaphore (Semaphore)
Semaphore digunakan untuk mengehadkan bilangan utas yang boleh mengakses sumber yang dikongsi pada masa yang sama. Ia dilaksanakan melalui kaunter yang mewakili bilangan utas yang boleh mengakses sumber secara serentak.
std::counting_semaphore<int> semaphore(2); void thread_function() { // 获取许可证,允许访问资源 semaphore.acquire(); // 访问共享资源 // 释放许可证 semaphore.release(); }
Pembolehubah Atom
Pembolehubah atom ialah jenis pembolehubah khas yang menjamin akses atom kepada pembolehubah yang dikongsi. Ia menggunakan arahan perkakasan khusus untuk memastikan bahawa operasi baca dan tulis pembolehubah tidak boleh dibahagikan, dengan itu menghalang perlumbaan data.
std::atomic<int> counter = 0; void thread_function() { // 原子增加计数器 counter.fetch_add(1); }
Kes praktikal: masalah pengeluar-pengguna
Masalah pengeluar-pengguna ialah masalah klasik dalam pengaturcaraan serentak, melibatkan benang pengeluar dan benang pengguna. Benang pengeluar menghasilkan dan memasukkan elemen ke dalam baris gilir yang dikongsi, manakala utas pengguna mengalih keluar elemen daripada baris gilir dan memakannya.
Menggunakan mekanisme kerjasama di atas, kami boleh menyelesaikan masalah ini dengan selamat dan boleh dipercayai:
Dengan menggabungkan mekanisme kerjasama ini, kami boleh mencipta pelaksanaan pengeluar-pengguna yang cekap dan bebas kunci.
Atas ialah kandungan terperinci Apakah mekanisme kerjasama fungsi C++ dalam pengaturcaraan serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!