這兩個(gè)線程如何互斥。打個(gè)比方:int a=0,b=0; //全局變量void * thread1() //線程1{//................a += 1; //①b = a; //②}void * thread2() //線程2{//.............a += 2;}這兩個(gè)線程在同時(shí)運(yùn)行,但我要實(shí)現(xiàn)當(dāng)線程1運(yùn)行到語句①時(shí),暫停線程2,讓b得到的值是線程1中的當(dāng)前的a值,而不是可能被線程2改變的a值。當(dāng)執(zhí)行完語句②之后又恢復(fù)到兩個(gè)線程同時(shí)運(yùn)行的情況。pthread_mutex_lock(&mut);a+=1;b=a;pthread_mutex_unlock(&mut);就是這個(gè)函數(shù),這樣能達(dá)到什么效果。好吧,我對多線程理解錯(cuò)了,是兩個(gè)線程之間交替運(yùn)行,所以b得到的始終是線程1里面的a值,但如果有延時(shí)函數(shù),多線程之間是如何運(yùn)作的,比如線程1里面有Sleep(1000)這個(gè)函數(shù)。
2 回答

慕容3067478
TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
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);
}
這樣就行呀, 加鎖后另一個(gè)要等待鎖釋放
添加回答
舉報(bào)
0/150
提交
取消