>  기사  >  백엔드 개발  >  뮤텍스는 멀티스레드 프로그래밍에서 경쟁 조건을 어떻게 방지합니까?

뮤텍스는 멀티스레드 프로그래밍에서 경쟁 조건을 어떻게 방지합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-11 15:18:02654검색

How do Mutexes Prevent Race Conditions in Multithreaded Programming?

뮤텍스 개념: 단순화된 튜토리얼

뮤텍스는 상호 배제 잠금을 줄여 여러 스레드가 공유 리소스에 동시에 액세스하는 것을 방지합니다. 작동 방식을 이해하려면 비유를 생각해 보세요.

전화 부스 예

문 손잡이가 있는 단일 전화 부스를 상상해 보세요. 전화기를 사용하기 위해 사람들(실)이 줄을 서는데, 문 손잡이를 잡은 사람만이 사용할 수 있습니다. 그들이 손을 놓는 순간 다른 사람이 자신의 차례를 맡을 수 있습니다.

이 비유에서:

  • 각 사람은 스레드를 나타냅니다.
  • 문 손잡이는 뮤텍스를 나타냅니다.
  • 문 손잡이를 잡는 것은 뮤텍스 잠그기를 나타냅니다.
  • 휴대전화를 사용하는 것은 보호된 코드 실행을 의미합니다 .

뮤텍스 논리

스레드는 pthread_mutex_lock(&mutex)를 호출하여 뮤텍스에 대한 잠금을 획득합니다. 이는 코드 영역을 해당 스레드에 대한 독점으로 표시합니다.

스레드가 해당 코드 실행을 마치면 pthread_mutex_unlock(&mutex)를 호출하여 잠금을 해제합니다. 이는 이제 잠금을 획득하고 보호된 코드를 실행할 수 있음을 다른 스레드에 알립니다.

간단한 뮤텍스 예

다음 C 11 코드는 뮤텍스 개념을 보여줍니다.

#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;
}

이 예에서는 세 개의 스레드(사람)가 공유 리소스(전화)를 사용하려고 합니다. 뮤텍스는 한 번에 하나의 스레드만 리소스에 액세스할 수 있도록 보장합니다.

위 내용은 뮤텍스는 멀티스레드 프로그래밍에서 경쟁 조건을 어떻게 방지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.