Linux——线程互斥与同步
文章目录
一、多人抢票模拟实现
上篇文章我们简单的对原生线程库就行了封装,这里直接引入代码
#pragma once
#include <iostream>
#include <pthread.h>
#include <functional>
using namespace std;
template <class T>
using func_t = function<void(T)>;
template <class T>
class Thread
{
// 传入该线程对应的Thread
static void *ThreadRoutine(void *args)
{
Thread *ts = static_cast<Thread *>(args);
//cout << "threadnamed: " << ts->_threadname << " " << "tid: " << ts->_tid << endl;
ts->_func(ts->_data);
return nullptr;
}
public:
Thread(string threadname, func_t<T> func, T data)
: _threadname(threadname), _func(func), _isrunning(false), _data(data)
{
}
bool Start()
{
int n = pthread_create(&_tid, nullptr, ThreadRoutine, this);
if (n == 0)
{
_isrunning = true;
return true;
}
else
{
return false;
}
}
bool Join()
{
if (!_isrunning)
{
return true;
}
int n = pthread_join(_tid, nullptr);
if (n == 0)
{
_isrunning = false;
return true;
}
else
{
return false;
}
}
string ThreadName()
{
return _threadname;
}
bool IsRunning()
{
return _isrunning;
}
~Thread()
{
}
private:
pthread_t _tid;
string _threadname;
func_t<T> _func;
T _data;
bool _isrunning;
};
模拟实现一段多线程抢票的代码
int tickets = 1000;
string GetThreadName(