C 0x에서 세마포어를 사용할 수 있나요?
스레드 통신에는 세마포어 기반 동기화가 필수적입니다. C 0x에 세마포어가 없으면 교착 상태인 것 같습니다.
뮤텍스와 조건 변수를 사용한 세마포어 에뮬레이션
다행히도 뮤텍스를 사용하여 세마포어를 다시 생성할 수 있습니다. 그리고 조건변수. 간단한 구현은 다음과 같습니다.
#include <mutex> #include <condition_variable> class semaphore { std::mutex mutex_; std::condition_variable condition_; unsigned long count_ = 0; // Initialized as locked. public: void release() { std::lock_guard<decltype(mutex_)> lock(mutex_); ++count_; condition_.notify_one(); } void acquire() { std::unique_lock<decltype(mutex_)> lock(mutex_); while(!count_) // Handle spurious wake-ups. condition_.wait(lock); --count_; } bool try_acquire() { std::lock_guard<decltype(mutex_)> lock(mutex_); if(count_) { --count_; return true; } return false; } };
이 에뮬레이션은 세마포어의 기본 동작을 제공합니다.
위 내용은 뮤텍스 및 조건 변수를 사용하여 C 0x 세마포어를 에뮬레이트할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!