我遇到了奇怪的行爲pthread_create
函數。代碼如下:創建線程很慢
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
void *foo(void* a) {
printf("Doing something");
pthread_exit(NULL);
}
int main() {
printf("Main created");
pthread_t thread;
pthread_create(&thread, NULL, foo, NULL);
while(1); // This causes trouble
pthread_join(thread, NULL);
return 0;
}
出於某種原因,在地方while
,從跟帖留言很長的延遲後顯示。我希望在pthread_create之後調用新線程是完全獨立於main的,因此不應該被它的代碼所影響。
您是否嘗試刷新'stdout'? –
@BenSteffan謝謝你的評論,在這個例子中它是由輸出緩衝引起的。 – Lorin
對'printf()'的調用正在寫入'stdout'流緩衝區。要通過該緩衝區並顯示在終端上,必須發生以下三件事之一。 1)緩衝區溢出(不太可能)2)程序結束3)格式字符串或數據以'\ n'結尾(未完成)因此在程序結束之前不會輸出任何內容。 'while(1);'循環永遠不會退出,所以程序永遠不會結束。還要注意:'main()'會吸收所有循環的CPU週期,所以沒有任何東西可以讓創建的線程運行。建議:使用'\ n'結束每個'printf()'格式字符串並移除'while()'語句 – user3629249