pthread系統呼叫

2021-09-25 03:57:11 字數 3196 閱讀 7934

pthread_create(pthread_t *, const pthread_attr_t *, void *(*)(void *), void *)

引數說明 

pthread_t * 表示執行緒id,宣告方式pthread_t tid; 

const pthread_attr_t * 表示執行緒的引數,參考 

void *(*)(void *)表示執行緒開始時執行的函式,如void fun(void*),也可使用類的靜態函式 

void* 為第三個引數所代表的函式的引數,即void* fun(void*)中第二個void* 

返回值為0表示成功,其他為錯誤例:

#include #include #include //sleep函式的標頭檔案

void* callfuntoprintfa(void * args);

void* callfuntoprintfb(void * args);

int main(int argc, const char * ar**)

pthread_exit( null );//等待執行緒結束後在結束程序

}void* callfuntoprintfa(void * args)

return null;

}void* callfuntoprintfb(void * args)

return null;

}

輸出結果: 

a b 

a b ……例

#include #include #include void* callfuntoprintfbyargs(void * args);

int main(int argc, const char * ar**)

}pthread_exit( null );//等待執行緒結束後在結束程序

}void* callfuntoprintfbyargs(void * args)

return null;

}

輸出(省略換行符) 

cba cba cba cba cab cba cba cba cba ……. 

輸出混亂,無法確定先後順序

pthread_exit(void *); 

描述:呼叫該函式即結束呼叫該函式的程序; 

引數 :pthread_t : 執行緒識別符號,即執行緒id,標識唯一執行緒。 

例:

#include #include #include pthread_t a;

void* printfthread(void* args);

int main(int argc, const char * ar**)

pthread_exit( null );//等待執行緒結束後在結束程序

}void* printfthread(void* args)

}return null;

}

輸出為1-50 

pthread_exit(null)成功將執行緒結束。

pthread_join(pthread_t, void **); 

描述:呼叫pthread_join即等待引數中的執行緒結束後在執行其他執行緒 

引數 :pthread_t: 執行緒識別符號,即執行緒id,標識唯一執行緒。 

返回值 : 0代表成功。 失敗,返回的則是錯誤號。

未使用阻塞

#include #include #include pthread_t a;

pthread_t b;

void* threada(void* args);

void* threadb(void* args);

int main(int argc, const char * ar**)

pthread_exit( null );//等待執行緒結束後在結束程序

}void* threada(void* args)

return null;

}void* threadb(void* args)

return null;

}

輸出 6 

1 7 

2 3 

4 5 

8 9 

10 使用阻塞

#include #include #include pthread_t a;

pthread_t b;

void* threada(void* args);

void* threadb(void* args);

int main(int argc, const char * ar**)

pthread_exit( null );//等待執行緒結束後在結束程序

}void* threada(void* args)

return null;

}void* threadb(void* args)

return null;

}

輸出 1 

2 3 

4 5 

6 7 

8 9 

10 呼叫pthread_join即等待引數中的執行緒結束後在執行其他執行緒

pthread_yield_np(); 

描述:呼叫即放棄本輪到該執行緒的執行時間 

例:

#include #include #include pthread_t a;

pthread_t b;

int i;

void* threada(void* args);

void* threadb(void* args);

int main(int argc, const char * ar**)

pthread_exit( null );//等待執行緒結束後在結束程序

}void* threada(void* args)

return null;

}void* threadb(void* args)

printf("threadbisrunning\n");

return null;

}

輸出 1 

2 3 

4 5 

threadbisrunning 

6 7 

8 9 

10

MPI和PThread相互呼叫

今天遇到了乙個問題,在mpi的程式中用pthread為0號程序開闢兩個執行緒,執行緒呼叫的函式又用到了mpi send mpi recv訊息傳遞,剛開始怎麼除錯都不行。呼叫方式如下 if rank 0 void sendtask void param else mpi send rectnumber...

Windows系統下pthread環境配置

記錄下win7系統,vc6.0 編譯器下配置posix多執行緒環境的步驟。配置 執行後點exract,解壓完成後再點done,可以看到三個資料夾,但只需要用到pre built.2資料夾。將pre built.2 include中的三個標頭檔案複製到vc的include資料夾內 將pre built...

linux 作業系統 pthread 多執行緒庫

include include posix標準的unix標準介面 include pthread t tid1 執行緒id pthread t tid2 void fun1 執行緒函式 void fun2 執行緒函式 int main gcc test.c o test lpthread test1...