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

좋은 웹페이지 즐겨찾기