#include <stdio.h>
#include "mythreads.h"
#include <stdlib.h>
#include <pthread.h>
void *
mythread(void *arg) {
printf("%s\n", (char *) arg);
return NULL;
}
int
main(int argc, char *argv[])
{
if (argc != 1) {
fprintf(stderr, "usage: main\n");
exit(1);
}
pthread_t p1, p2;
printf("main: begin\n");
Pthread_create(&p1, NULL, mythread, "A");
Pthread_create(&p2, NULL, mythread, "B");
// join waits for the threads to finish
//Pthread_join(p1, NULL);
//Pthread_join(p2, NULL);
printf("main: end\n");
return 0;
}
這是一個來自Remzi的代碼第27章玩耍,我很想知道爲什麼有時在運行時,我會打印兩次。我知道爲什麼會發生這種情況,因爲我沒有包含聯合聲明。爲什麼要跳過連接造成這種情況?當pthread_join被註釋時會發生什麼?
我的輸出:
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
A
main: end
B
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
A
main: end
B
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
main: end
A
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
main: end
B
A
A
請修正您的代碼中的編譯器錯誤,並刪除對非提供的「mythreads.h」頭的依賴。 – o11c
大寫的函數名稱是否覆蓋函數名稱的所有小寫版本的函數,除非它們執行某種錯誤處理並可能報告?就目前而言,只有熟悉「mythreads.h」標題和圖書/課程資料的人才能夠提供幫助。我們可以做出(或多或少)受過教育的猜測,但我們不喜歡猜測。 –
可能重複[pthread:一個printf語句在子線程中打印兩次](http://stackoverflow.com/questions/13550662/pthread-one-printf-statement-get-printed-twice-in-child-thread) –