Dalam pengaturcaraan serentak, mutex dan bahagian kritikal digunakan untuk menghalang perlumbaan data. Mutex ialah struktur data yang membenarkan hanya satu utas untuk mengakses sumber yang dikongsi pada satu masa Pelaksanaan khusus adalah seperti berikut: Tentukan kelas Mutex dengan tag atom. Gunakan kaedah test_and_set() untuk mengunci dan kaedah clear() untuk membuka kunci. Bahagian kritikal ialah bahagian kod yang hanya boleh dilaksanakan oleh satu utas pada satu masa Pelaksanaan khusus adalah seperti berikut: mengisytiharkan mutex. Gunakan pembungkus lock_guard untuk mengakses sumber kongsi dalam bahagian kritikal.
Dalam pengaturcaraan serentak, apabila beberapa utas mengakses sumber dikongsi pada masa yang sama, adalah perlu untuk mengelakkan persaingan data dan memastikan ketekalan data. Mutex dan bahagian kritikal adalah dua cara biasa untuk mencapai ini.
Mutex ialah struktur data yang memastikan hanya satu utas boleh mengakses sumber yang dikongsi pada satu masa. Mutex biasanya dilaksanakan menggunakan kaedah berikut:
class Mutex { private: std::atomic_flag flag; public: void lock() { while (flag.test_and_set(std::memory_order_acquire)); } void unlock() { flag.clear(std::memory_order_release); } };
Bahagian kritikal ialah bahagian kod yang hanya boleh dilaksanakan oleh satu utas pada bila-bila masa. Bahagian kritikal biasanya dilaksanakan menggunakan sintaks berikut:
std::mutex mutex; void critical_section() { std::lock_guard<std::mutex> lock(mutex); // 共享资源的访问 }
Pertimbangkan program yang mengandungi pembilang kongsi yang boleh dinaikkan berbilang urutan secara serentak. Lindungi kaunter menggunakan mutex:
Mutex counter_mutex; int counter = 0; void increment_counter() { counter_mutex.lock(); counter++; counter_mutex.unlock(); }
Lindungi kaunter menggunakan bahagian kritikal:
std::mutex counter_mutex; void increment_counter() { std::lock_guard<std::mutex> lock(counter_mutex); counter++; }
Menggunakan mutex atau bahagian kritikal boleh memastikan bahawa hanya satu utas mengubah suai kaunter pada masa yang sama, sekali gus menghalang perlumbaan data. Pilihan yang tepat bergantung pada prestasi dan keperluan kerumitan aplikasi khusus anda.
Atas ialah kandungan terperinci Pelaksanaan pengecualian bersama dan bahagian kritikal fungsi C++ dalam pengaturcaraan serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!