Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Mutexes Menghalang Keadaan Perlumbaan dalam Pengaturcaraan Berbilang Thread?
Konsep Mutex: Tutorial Ringkas
Mutexes, singkatan untuk kunci pengecualian bersama, menghalang berbilang rangkaian daripada mengakses sumber dikongsi secara serentak. Untuk memahami cara ia berfungsi, pertimbangkan satu analogi:
Contoh Pondok Telefon
Bayangkan satu pondok telefon dengan pemegang pintu. Orang (benang) beratur untuk menggunakan telefon, tetapi hanya orang yang mencengkam pemegang pintu boleh menggunakannya. Sebaik sahaja mereka melepaskan, orang lain boleh mengambil giliran mereka.
Dalam analogi ini:
Logik Mutex
Benang memperoleh kunci pada mutex dengan memanggil pthread_mutex_lock(&mutex). Ini menandakan kawasan kod sebagai eksklusif untuk urutan itu.
Setelah utas selesai melaksanakan kod itu, ia melepaskan kunci dengan memanggil pthread_mutex_unlock(&mutex). Ini memberi isyarat kepada urutan lain bahawa mereka kini boleh memperoleh kunci dan melaksanakan kod yang dilindungi.
Contoh Mutex Mudah
Kod C 11 berikut menggambarkan konsep mutex:
#include <iostream> #include <thread> #include <mutex> std::mutex m; int i = 0; void makeACallFromPhoneBooth() { m.lock(); // Thread acquires lock on mutex (grabs door handle) std::cout << i << " Hello Wife" << std::endl; // Protected code i++; // No other thread can modify i while lock is held m.unlock(); // Thread releases lock (lets go of door handle) } int main() { std::thread man1(makeACallFromPhoneBooth); std::thread man2(makeACallFromPhoneBooth); std::thread man3(makeACallFromPhoneBooth); man1.join(); man2.join(); man3.join(); return 0; }
Dalam contoh ini, tiga utas (orang) cuba menggunakan sumber yang dikongsi (telefon). Mutex memastikan bahawa hanya satu utas boleh mengakses sumber pada satu masa.
Atas ialah kandungan terperinci Bagaimanakah Mutexes Menghalang Keadaan Perlumbaan dalam Pengaturcaraan Berbilang Thread?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!