c++잠 금 동작
Template parameters
Mutex
-
the type of the mutex to lock. The type must meet the[BasicLockable
](http://en.cppreference.com/w/cpp/concept/BasicLockable)requirements
Definition
mutex_type
Mutex
Member functions
constructs a lock_guard, optionally locking the given mutex(public member function)
destructs the lock_guard object, unlocks the underlying mutex(public member function)
operator=[deleted] not copy-assignable(public member function)
// MutexLock.h
#include
#include
using std::cout;
using std::endl;
#include
#include
using std::cout;
using std::endl;
class MutexLock
{
public:
MutexLock()
:_isLock(false){
pthread_mutex_init(&_mutex, NULL);
}
~MutexLock() {
pthread_mutex_destroy(&_mutex);
}
pthread_mutex_t *getMutexLocker() {
return &_mutex;
}
void lock() {
pthread_mutex_lock(&_mutex);
_isLock = true;
}
void unlock() {
pthread_mutex_lock(&_mutex);
_isLock = true;
}
bool state() const {
return _isLock;
}
private:
MutexLock(const MutexLock&); //
MutexLock &operator =(const MutexLock&); //
private:
pthread_mutex_t _mutex;
bool _isLock;
};
/*
int main() {
int a=3;
int b=a;
MutexLock mutex;
mutex.lock();
mutex.unlock();
return 0;
}
*/
//
#include "MutexLock.h"
#include
#include
using std::cout;
using std::endl;
class Condition
{
public:
Condition(MutexLock &mutex)
:_mutex(mutex){
pthread_cond_init(&_cond,NULL);
}
~Condition() {
pthread_cond_destroy(&_cond);
}
void wait() {
pthread_cond_wait(&_cond, _mutex.getMutexLockPtr());
}
void notify() {
pthread_cond_signal(&_cond);
}
void allnotify() {
pthread_cond_brodcast(&_cond);
}
private:
MutexLock & _mutex;
pthread_cond_t _cond;
};
int main() {
MutexLock mutex;
Condition cond(mutex);
mutex.lock();
cond.wait();
cond.notify();
mutex.unlock();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.