乙個執行緒競爭的問題

2021-06-01 06:24:40 字數 975 閱讀 7676

下面這個程式存在競爭,當對等執行緒執行 

int myid = *((int *)argv)  前,如果主線程先執行了 i++,那麼對等執行緒的執行結果是不正確。

view plain

print?

#include 

#include 

#define n 100

void

*thread

(void

*argv)  

intmain(

intargc, 

char

**argv)  

《深入理解計算機系統》一書給出了兩種方法,一是動態為每乙個 id 分配記憶體,並且傳遞給執行緒乙個指向這個塊的指標,**如下:

view plain

print?

#include 

#include 

#include 

#define n 100

void

*thread

(void

*argv)  

intmain(

intargc, 

char

**argv)  

for(i = 0; i < n; i++)  

pthread_join(tid[i], null);  

return

0;  

}           這種方法的缺點就是需要在對等執行緒中釋放空間,另一種方法是利用強制轉換,它的缺點是假設指標至少和int一樣大。**如下:

view plain

print?

#include 

#include 

#define n 100

void

*thread

(void

*argv)  

intmain(

intargc, 

char

**argv)  

乙個執行緒死鎖問題的分析

客戶報過來乙個問題,伺服器執行一周左右就會停止響應,有時候甚至兩天就不響應了,併發使用者量並不大,重啟服務後又工作正常。每當遇到這種問題時就有點兒棘手。一是這種問題的復現條件不好確定,另一方面,即使確定了條件,對於多執行緒的服務程式,也不好除錯。我遇到過的這種問題,大部分是靠讀 分析出來乙個可能的原...

乙個有趣的多執行緒問題

師弟問了個非常有趣的多執行緒問題,之前沒有關注,這裡寫下自己的心得。對於如下 include include include uint winapi fun1proc lpvoid lpparameter uint winapi fun2proc lpvoid lpparameter int ind...

關於java執行緒的乙個問題

最近在寫乙個程式.其中就遇到了這樣乙個問題.我希望實現兩個或多個執行緒,而這些執行緒的順序是 thread thread 2,5,main a 這是執行緒2呼叫b時列印出的 thread thread 3,5,main a 這是執行緒3呼叫b時列印出的 上面的順序是我所希望的.但往往會是這樣的結果 ...