猿问

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

这两个线程如何互斥。打个比方:
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)这个函数。

达令说
浏览 81回答 2
2回答

慕容3067478

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);}这样就行呀, 加锁后另一个要等待锁释放

Smart猫小萌

Sleep(1000)会导致线程1至少被挂起1000秒
随时随地看视频慕课网APP
我要回答