23,216
社区成员




#include <pthread.h>
#include <stdio.h>
class A
{
public:
A();
private:
pthread_mutex_t m;
};
A::A()
{
pthread_mutex_init(&m, NULL);
}
int main()
{
return 0;
}
//lock.h 头文件
#ifndef AUTO_LOCK_H
#define AUTO_LOCK_H
#include <pthread.h>
namespace util
{
class LockableObject {
public:
LockableObject(){};
virtual ~LockableObject(){};
virtual void lock() = 0;
virtual void unlock() = 0;
};
class ThreadMutex : public LockableObject {
public:
ThreadMutex();
virtual ~ThreadMutex();
virtual void lock();
virtual void unlock();
private:
pthread_mutex_t m_cs;
};
class AutoLock {
public:
AutoLock(LockableObject* pLockable);
~AutoLock();
private:
LockableObject* m_pLockable;
};
}
#endif
#include "lock.h"
#include <stdio.h>
//lock.cpp 头文件
namespace util
{
ThreadMutex::ThreadMutex() {
pthread_mutex_init(&m_cs, NULL);
}
ThreadMutex::~ThreadMutex() {
pthread_mutex_destroy(&m_cs);
}
void ThreadMutex::lock() {
pthread_mutex_lock(&m_cs);
}
void ThreadMutex::unlock() {
pthread_mutex_unlock(&m_cs);
}
AutoLock::AutoLock(LockableObject* pLockable) {
m_pLockable = pLockable;
m_pLockable->lock();
}
AutoLock::~AutoLock() {
m_pLockable->unlock();
}
}
//main.cpp
#include <stdio.h>
#include "lock.h"
using namespace util;
int main(int argc, char *argv[])
{
ThreadMutex cs;
AutoLock(cs);
return 0;
}