2013-07-08 31 views
0

我c寫程序測試並行線程(使用的cygwin)我期待的結果是簡單並行線程PROG與cygwin的(意外的結果)

線程1 線程1 螺紋2 螺紋2 線程1 。 ...

或附近的告訴我,在平行 兩個線程工作,但結果是任何東西 線程1 線程1 線程1 線程1 線程1 線程2 線程2 線程2 線程2 線程2 T1 = 0,T2 = 0

#include <stdio.h> 
#include <stdlib.h> 
#include <pthread.h> 
void *funa(); 
void *funb(); 

int main() 
{ 
    //create thread 
    pthread_t thread1, thread2; 
    int T1=pthread_create(&thread1, NULL, funa, NULL); 
    int T2=pthread_create(&thread2, NULL, funb, NULL); 

    //join thread 
    pthread_join(thread1, NULL); 
    pthread_join(thread2, NULL); 

    //return 0 if sucess 
    printf("T1=%d , T2=%d",T1,T2); 
exit(0); 
} 
void *funa() 

{int i; 
for (i=0;i<5;i++) 
printf("thread 1\n"); 

} 
void *funb() 

{int j; 
for (j=0;j<5;j++) 
printf("thread 2\n"); 

} 
+3

你爲什麼期待?除非用某種類型的鎖強制執行,否則不應該期待任何順序。地獄,線程1可能在線程2開始之前就已經完成了。 – xaxxon

+0

我同意@xaxxon,你不應該期待任何與打印排序有關的行爲。有可能你會看到線索5五次,然後線索1五次。你沒有保證。唯一你知道的是,你會看到五個線程1語句和五個線程2語句 – MadDogMcNamara

+0

謝謝xaxxon MadDogMcNamara – user2505841

回答

0

從已經被其他意見中提到的問題的細節,退一步看起來像你想要一些在你的線程中進行排序。

如果是這樣,您可能需要考慮在for循環中添加一些pthread_barrier_wait()details)。每次調用屏障都會阻塞,直到所有預期線程調用屏障。在初始化屏障pthread_barrier_init()時,應該設置要等待的線程數。