为了账号安全,请及时绑定邮箱和手机立即绑定

好像是跟那个什么互锁有关,但是尝试了好多次都不对。

好像是跟那个什么互锁有关,但是尝试了好多次都不对。

达令说 2023-03-02 11:11:06
这两个线程如何互斥。打个比方:int a=0,b=0; //全局变量void * thread1() //线程1{//................a += 1; //①b = a; //②}void * thread2() //线程2{//.............a += 2;}这两个线程在同时运行,但我要实现当线程1运行到语句①时,暂停线程2,让b得到的值是线程1中的当前的a值,而不是可能被线程2改变的a值。当执行完语句②之后又恢复到两个线程同时运行的情况。pthread_mutex_lock(&mut);a+=1;b=a;pthread_mutex_unlock(&mut);就是这个函数,这样能达到什么效果。好吧,我对多线程理解错了,是两个线程之间交替运行,所以b得到的始终是线程1里面的a值,但如果有延时函数,多线程之间是如何运作的,比如线程1里面有Sleep(1000)这个函数。
查看完整描述

2 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

void * thread1() //线程1
{
//............. pthread_mutex_lock(&mut);
a += 1; //①
b = a; //②
pthread_mutex_unlock(&mut);
}

void * thread2() //线程2
{
//.............
pthread_mutex_lock(&mut);  
a += 2;
pthread_mutex_unlock(&mut);
}

这样就行呀, 加锁后另一个要等待锁释放

查看完整回答
反对 回复 2023-03-06
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

Sleep(1000)会导致线程1至少被挂起1000秒

查看完整回答
反对 回复 2023-03-06
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信