Linux 第三十四章

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数C初学者入门训练题解CC的使用文章「初学」C++linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

封装线程

Linux线程互斥

加锁 

创建一个锁(互斥量)

pthread_mutex_lock(&mutex);加锁/pthread_mutex_unlock(&mutex);解锁

源码实现


封装线程

//开发方
#pragma once

#include<iostream>
#include<string>
#include<functional>
#include<pthread.h>


using namespace std;



//typedef function<void()> func_t
template<class T>

using func_t=function<void(T)>;



template<class T>

class Thread

{
public:
Thread(func_t<T> func,const string& threadname,T data)

:_tid(0),_threadname(threadname),_isrunning(false),_func(func),_data(data)
{}


static void* Threadroutine(void* args)//类内成员方法,其第一个参数是this指针,所以会导致编译错误

//这里使用static,让Thraedroutine成为类的方法,
{
(void)args;//仅仅是为了消除警告,变量未使用


Thread* ts=static_cast<Thread*>(args);

ts->_func(ts->_data);
return nullptr;

}


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;

}
return false;

}


bool Isrunning()

{
return _isrunning;

}


string Threadname()

{
return _threadname;

}
private:
pthread_t _tid;

string _threadname;

bool _isrunning;

func_t<T> _func;

T _data;

};

//应用方
#incl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值