Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Mutexes Menghalang Keadaan Perlumbaan dalam Pengaturcaraan Berbilang Thread?

Bagaimanakah Mutexes Menghalang Keadaan Perlumbaan dalam Pengaturcaraan Berbilang Thread?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 15:18:02655semak imbas

How do Mutexes Prevent Race Conditions in Multithreaded Programming?

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:

  • Setiap orang mewakili benang.
  • Pemegang pintu mewakili mutex.
  • Memegang pemegang pintu mewakili mengunci mutex.
  • Menggunakan telefon mewakili melaksanakan kod yang dilindungi .

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn