第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

大蝦們幫幫忙,看看我的代碼,出什么問題了

大蝦們幫幫忙,看看我的代碼,出什么問題了

紫衣仙女 2023-03-03 15:11:19
#include <stdio.h>#include <pthread.h>pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER;pthread_t tid1, tid2, tid3;void *thrd_1( void *arg){pthread_mutex_lock(&qlock);printf("thred_1..test1\n");sleep(2);printf("thred_1...test2\n");sleep(2);printf("thred_1..test3\n");sleep(2);printf("thred_1..test4\n");sleep(2);printf("thred_1..test5\n");sleep(2);printf("thred_1..test6\n");sleep(2);pthread_mutex_unlock(&qlock);}void *thrd_2(void *arg){pthread_mutex_lock(&qlock);sleep(2);printf("thred_2..test2\n");printf("thred_2..test1\n");sleep(2);printf("thred_2..test3\n");sleep(2);printf("thred_2..test4\n");sleep(2);printf("thred_2..test5\n");sleep(2);printf("thred_2..test6\n");sleep(2);pthread_mutex_unlock(&qlock); }void *thrd_3(){printf("thrd_3....test1\n");sleep(2);printf("thrd_3....test2\n");sleep(2);printf("thrd_3....test3\n");sleep(2);printf("thrd_3....test4\n");sleep(2);printf("thrd_3....test5\n");sleep(2);printf("thrd_3....test6\n");}int main(){int ret;ret = pthread_create(&tid1,NULL,thrd_1, NULL);ret = pthread_create(&tid2,NULL,thrd_2, NULL);ret = pthread_create(&tid3,NULL,thrd_3, NULL);while(1){printf("main sleep\n");sleep(2);};return 0;}就是創(chuàng)建了三個線程,三個線程都是每隔兩秒打印一次printf函數(shù),其中的話第一個線程跟第二個線程加鎖,但第三個線程沒有加鎖,理論上如果假設(shè)第一個線程創(chuàng)建出來,它加上鎖之后是不是應(yīng)該把鎖之中的printf都輸出完后在執(zhí)行別的,但是結(jié)果卻不是這樣,在線程1打印printf的過程中,線程3中的printf也打印了出來,結(jié)果如下:
查看完整描述

3 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗 獲得超4個贊

多線程的效果就是同一時間各個線程都在執(zhí)行。
加鎖不是給線程上鎖。
pthread_mutex_lock(&qlock);表示嘗試去把qlock上鎖,它會先判斷qlock是否已經(jīng)上鎖,如果已經(jīng)上鎖這個線程就會停在這一步直到其他線程把鎖解開。它才繼續(xù)運行。
所以代碼中要么是線程1先執(zhí)行完后執(zhí)行線程2,要么就是線程2先執(zhí)行,再執(zhí)行線程1.而線程3一開始就執(zhí)行了。
互斥量mutex是用來給多線程之間的貢獻(xiàn)資源上鎖的。也就是同一個時間只允許一個線程去訪問該資源(資源:比如對文件的寫操作)。
現(xiàn)在來回答樓主的問題:
不是只要在pthread_mutex_lock(&qlock)與pthread_mutex_unlock(&qlock)之間的代碼執(zhí)行,其他的都不能介入嗎?
其他的都不能介入,不是整個進(jìn)程只運行這一個線程,其他線程都停住了。
“不能介入“這個動作需要程序員自己設(shè)計來保證:好比前面提到的文件讀寫操作。為了防止多個線程同時對文件進(jìn)行寫入操作,這就需要把資源上鎖了。
如果只有線程1加鎖,那是不是這個鎖就沒有意義了呢?
這個理解可以有

查看完整回答
反對 回復(fù) 2023-03-06
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊

互斥鎖的概念是:當(dāng)獲取不到鎖時將線程睡眠,此時CPU可以調(diào)度其它線程,線程3沒有獲取這個鎖,所以和線程1/2沒有關(guān)聯(lián),和他們鎖不鎖沒有關(guān)系。

查看完整回答
反對 回復(fù) 2023-03-06
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊

線程1和線程2都是請求同一個鎖的所有權(quán),因為每次只能有一個獲取所有權(quán),所以線程1、2同時只能執(zhí)行一個,線程3不需要獲取鎖,當(dāng)給它分配了時間片之后就可以執(zhí)行了

查看完整回答
反對 回復(fù) 2023-03-06
  • 3 回答
  • 0 關(guān)注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號