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...