#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <math.h>
struct my_Struct{
int a;
int b;
};
void *myThreadFun(void *received_struct)
{
struct my_Struct *struct_ptr = (struct my_Struct*) received_struct;
printf("%.1lf",pow(struct_ptr->a,struct_ptr->b));
return NULL;
}
int main(int argc, char* argv[])
{
struct my_Struct s;
s.a = atoi(argv[1]);
s.b = atoi(argv[2]);
pthread_t thread_id;
pthread_create(&thread_id, NULL, myThreadFun, &s);
pthread_join(thread_id, NULL);
while(1);
exit(0);
}
為什么這段代碼什么都不做?它應該在生成的執行緒中列印陳述句,然后進入無限回圈。
uj5u.com熱心網友回復:
使用gdb我們可以看到執行緒分叉成功
[New Thread 0x7ffff7a2d640 (LWP 8261)]
[Switching to Thread 0x7ffff7a2d640 (LWP 8261)]
Thread 2 "a.out" hit Breakpoint 1, myThreadFun (received_struct=0x7fffffffd960) at tmp.cpp:15
如果你洗掉while(1)你可以找到輸出。輸出延遲可能與 stdio 的緩沖區有關,while(1)阻止了緩沖區重繪 。
您可以嘗試另一種方法:在fflush(stdout);之后添加printf,效果相同。
uj5u.com熱心網友回復:
這是因為stdout緩沖整行,所以這意味著它不會列印您的值,直到您執行以下三件事之一:
- 結束你的字串
\n:printf("%.1lf\n", ...) - 重繪 stdio 緩沖區:
fflush(stdio) - 終止程式(它將自動重繪 所有緩沖區)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351553.html
上一篇:什么是C中的繁忙回圈?
