下面這個程式存在競爭,當對等執行緒執行
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時列印出的 上面的順序是我所希望的.但往往會是這樣的結果 ...