码迷,mamicode.com
首页 > 编程语言 > 详细

C++之MutexLock和MutexLockGuard封装

时间:2018-07-04 22:45:02      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:tar   main   ini   this   fun   rand   unique   stream   start   

 thread.h

#ifndef __WD_MUTEXLOCK_H__
#define __WD_MUTEXLOCK_H__

#include <pthread.h> 
namespace wd
{

class MutexLock
{
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
 

  

thread.cc

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

  

testThread.cc

#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封装

标签:tar   main   ini   this   fun   rand   unique   stream   start   

原文地址:https://www.cnblogs.com/cthon/p/9265514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!