标签:ati fine detach return head mes protect name define
#ifndef __WD_NONCOPYABLE_H__
#define __WD_NONCOPYABLE_H__
namespace wd
{
class Noncopyable
{
protected:
Noncopyable(){}
~Noncopyable(){}
private:
Noncopyable(const Noncopyable&);
Noncopyable & operator=(const Noncopyable &);
};
}//end of namespace wd
#endif
#ifndef __WD_MUTEXLOCK_H__
#define __WD_MUTEXLOCK_H__
<br>#include "Noncopyable.h"
#include <pthread.h>
namespace wd
{
class MutexLock<br>:public Noncopyable //表达语义
{
public:
MutexLock()
{ pthread_mutex_init(&_mutex, NULL); }
~MutexLock()
{ pthread_mutex_destroy(&_mutex); }
void lock()
{ pthread_mutex_lock(&_mutex);}
void unlock()
{ pthread_mutex_unlock(&_mutex);}
pthread_mutex_t * getMutexLockPtr()
{ return &_mutex; }
private:
pthread_mutex_t _mutex;
};
//RAII
class MutexLockGuard
{
public:
MutexLockGuard(MutexLock & mutex)
: _mutex(mutex)
{ _mutex.lock(); }
~MutexLockGuard()
{ _mutex.unlock(); }
private:
MutexLock & _mutex;
};
}//end of namespace wd
#endif
#include "Thread.h"
#include <iostream>
using std::cout;
using std::endl;
using namespace wd;
Thread::Thread()
: _pthid(0)
, _isRunning(false)
{}
void Thread::start()
{
pthread_create(&_pthid, NULL, threadFunc, this);
_isRunning = true;
}
void * Thread::threadFunc(void * arg)
{
Thread * pthread = static_cast<Thread*>(arg);
if(pthread)
pthread->run();// 执行任务
return NULL;
}
void Thread::join()
{
pthread_join(_pthid, NULL);
_isRunning = false;
}
Thread::~Thread()
{
if(_isRunning)
{
pthread_detach(_pthid);// 将运行的线程交给系统进行托管
_isRunning = false;
}
}
#include "Thread.h"
#include <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <memory>
using std::cout;
using std::endl;
using std::unique_ptr;
class MyThread
: public wd::Thread
{
void run()
{
::srand(::time(NULL));
int cnt = 10;
while(cnt--) {
int number = ::rand() % 100;
cout << ">> Thread "<< pthread_self() << " get a number : " << number << endl;
::sleep(1);
}
}
};
int main(void)
{
cout << "MainThread: " << pthread_self() << endl;
unique_ptr<wd::Thread> myThread(new MyThread());//线程对象在主线程
myThread->start();
myThread->join();
return 0;
}
C++之MutexLock和MutexLockGuard封装
标签:ati fine detach return head mes protect name define
原文地址:https://www.cnblogs.com/ims-/p/13763612.html