C++ 다중 스레드 프로그래밍에서는 뮤텍스 및 조건 변수를 사용하여 공유 리소스를 효율적으로 관리하고 데이터 경쟁 및 교착 상태를 피할 수 있습니다. 뮤텍스(Mutex)는 한 번에 하나의 스레드만 리소스에 액세스하도록 허용하여 데이터 무결성을 보장합니다. 조건 변수(Condition Variable)는 스레드 협력을 조정하는 데 사용되며, 한 스레드가 다른 스레드가 특정 작업을 수행할 때까지 기다릴 수 있도록 합니다. 실제 경우 생산자 스레드는 버퍼에 데이터를 추가하고 소비자에게 알립니다. 소비자 스레드는 생산자 알림을 기다린 다음 버퍼에서 데이터를 읽습니다. 뮤텍스 및 조건 변수는 공유 리소스에 대한 스레드로부터 안전한 액세스를 보장합니다.
C++ 멀티 스레드 프로그래밍: 공유 리소스를 효율적으로 관리합니다.
멀티 스레드 프로그래밍에서는 공유 리소스에 대한 액세스 제어가 중요합니다. 이 기사에서는 C++에서 뮤텍스 및 조건 변수와 같은 동기화 기본 요소를 사용하여 공유 리소스를 효율적으로 관리하고 데이터 경합 및 교착 상태를 방지하는 방법을 설명합니다.
Mutex(Mutex)
Mutex는 동시 액세스로부터 공유 리소스를 보호하는 핵심 메커니즘입니다. 한 번에 하나의 스레드만 리소스에 액세스할 수 있으므로 데이터 무결성이 보장됩니다.
std::mutex m; // 创建一个互斥量 void access_resource() { std::lock_guard<std::mutex> lock(m); // 加锁 // 对共享资源执行操作 lock.unlock(); // 解锁 }
조건 변수
조건 변수는 스레드 협력을 조정하는 데 사용됩니다. 이를 통해 한 스레드는 다른 스레드가 특정 작업을 수행할 때까지 기다릴 수 있습니다.
std::condition_variable cv; // 创建一个条件变量 std::mutex m; // 创建一个与条件变量关联的互斥量 void produce() { std::unique_lock<std::mutex> lock(m); // 生产数据 lock.unlock(); cv.notify_one(); // 通知消费者生产完成 } void consume() { std::unique_lock<std::mutex> lock(m); // 等待生产者通知 cv.wait(lock); // 消费数据 lock.unlock(); }
실제 사례
다음은 공유 리소스를 관리하기 위해 뮤텍스와 조건 변수를 사용하는 간단한 예입니다. 버퍼를 사용하여 데이터를 저장하고, 생산자 스레드는 버퍼에 데이터를 추가하고, 소비자 스레드는 버퍼에서 데이터를 읽습니다.
#include <mutex> #include <condition_variable> #include <thread> #include <vector> std::mutex m; std::condition_variable cv; std::vector<int> buffer; // 共享资源缓冲区 void produce() { while (true) { std::lock_guard<std::mutex> lock(m); buffer.push_back(rand()); cv.notify_one(); } } void consume() { while (true) { std::unique_lock<std::mutex> lock(m); cv.wait(lock, [] { return !buffer.empty(); }); int data = buffer.back(); buffer.pop_back(); } } int main() { std::thread t1(produce); std::thread t2(consume); t1.join(); t2.join(); return 0; }
뮤텍스와 조건 변수를 사용하여 생산자 스레드와 소비자 스레드가 동시에 버퍼에 액세스할 수 있도록 보장하지만 데이터 경합은 발생하지 않습니다.
위 내용은 C++ 다중 스레드 프로그래밍에서 공유 리소스를 효율적으로 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!