零散知識(shí)。
成都創(chuàng)新互聯(lián)企業(yè)建站,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁中充分展現(xiàn),通過對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。
1.線程id--- 進(jìn)程id的類型是pid_t, 線程id的類型是pthread_t;
比較兩個(gè)線程id:
#include
int pthread_equal ( pthread_t tid1, pthread_t tid2 );
獲得自身的線程id:
pthread_t pthread_self(void)
2.線程創(chuàng)建
int pthread_create( pthread_t *restrict tidp, const pthread_attr_t *restrict attr,
void *(*start_rtn)(void *), void *restrict arg );
接下來是打印線程id的例子:
#include
#include
#include
#include
#include
#include
pthread_t ntid;
void printids(const char *s){
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid %u tid %u (0x%x)\n",s, (unsigned int)pid,
(unsigned int)tid, (unsigned int) tid);
}
void *thr_fn(void *arg){
printids("new thread: ");
return ((void*)0);
}
int main(){
int err = 0;
err = pthread_create(&ntid, NULL, thr_fn, NULL);
//err = pthread_create(&ntid, NULL, thr_fn, NULL);
if(err!=0){
printf("%s\n", strerror(err) );
}
printids("main thread:");
sleep(1);
exit(0);
}
使用ubuntu,eclipse編譯,提示找不到pthread_create. 頭文件是定義了,但是沒有連接線程庫。 需要設(shè)置eclipse。 選擇工程--屬性--c、c++build--settings---gcc c linker---libraries, 添加庫 pthread。 再次編譯運(yùn)行。ok。
main thread: pid 2164 tid 3079145152 (0xb78806c0)
new thread: pid 2164 tid 3079142256 (0xb787fb70)
3、線程終止
void *thr_fn1(void *arg){
printf("thread 1 returning\n");
return ((void* )1);
}
void *thr_fn2(void *arg){
printf("thread 2 exiting\n");
pthread_exit((void *)1);
}
int main(){
int err;
pthread_t tid1, tid2;
void *tret;
err = pthread_create(&tid1, NULL, thr_fn1, NULL);
if( err != 0){
printf("can't create thread 1:%s\n", strerror(err));
}
err = pthread_create(&tid2, NULL, thr_fn2, NULL);
if( err!=0){
printf("can't create thread 2:%s\n", strerror(err));
}
err = pthread_join(tid1, &tret);
if(err!=0){
printf("can't join with thread 1:%s\n", strerror(err));
}
printf(" thread 1 exit code %d\n", (int)tret);
err = pthread_join(tid2, &tret);
if(err!=0){
printf("can't join eith thread 2:%s\n", strerror(err));
}
printf("thread 2 exit code %d\n", (int)tret);
exit(0);
}