뮤텍스 개념: 단순화된 튜토리얼
뮤텍스는 상호 배제 잠금을 줄여 여러 스레드가 공유 리소스에 동시에 액세스하는 것을 방지합니다. 작동 방식을 이해하려면 비유를 생각해 보세요.
전화 부스 예
문 손잡이가 있는 단일 전화 부스를 상상해 보세요. 전화기를 사용하기 위해 사람들(실)이 줄을 서는데, 문 손잡이를 잡은 사람만이 사용할 수 있습니다. 그들이 손을 놓는 순간 다른 사람이 자신의 차례를 맡을 수 있습니다.
이 비유에서:
뮤텍스 논리
스레드는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!