亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 請教pthread_creat()問題 [打印本頁]

作者: solitrarychen    時間: 2013-11-15 16:07
標(biāo)題: 請教pthread_creat()問題
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>

  4. void *thrd_func(void *arg);
  5. pthread_t tid;

  6. int main(){
  7.     // 創(chuàng)建線程tid,且線程函數(shù)由thrd_func指向,是thrd_func的入口點(diǎn),即馬上執(zhí)行此線程函數(shù)
  8.     if (pthread_create(&tid,NULL,thrd_func,NULL)!=0) {
  9.         printf("Create thread error!\n");
  10.         exit(1);
  11.     }

  12.     printf("TID in pthread_create function: %u.\n",tid);
  13.     printf("Main process: PID: %d,TID: %u.\n",getpid(),pthread_self());
  14.    
  15.     sleep(1); //race

  16.     return 0;
  17. }

  18. void *thrd_func(void *arg){
  19. //    printf("I am new thread!\n");
  20.     printf("New process:  PID: %d,TID: %u.\n",getpid(),pthread_self()); //why pthread_self
  21.     printf("New process:  PID: %d,TID: %u.\n",getpid(),tid); //why pthread_self

  22.     pthread_exit(NULL); //退出線程
  23. //    return ((void *)0);
  24. }
復(fù)制代碼
程序運(yùn)行結(jié)果是:


剛剛接觸linux的線程編程,所以有很多不懂的地方,這是某位大牛博客上的一段程序。
1. 我不理解的是,在函數(shù)void thrd_func(void *)中,并沒有定義tid這個變量,而使用了printf輸出,這樣不會造成內(nèi)存引用錯誤嗎?
2. 還有一點(diǎn)不理解的地方是, 為什么在main函數(shù)中pthread_self()返回值是3079558848,而在void thrd_func( )函數(shù)中thread_sel()返回值是3079555952.
希望大家可以解答一下。
作者: lyyiqo    時間: 2013-11-15 19:08
tid是全局變量
main中的self為main線程tid,而函數(shù)里的是創(chuàng)建的tid,既然是創(chuàng)建的,tid總不能相同吧


作者: ErenNo1    時間: 2013-11-15 19:12
tid 是全局變量。---------------------------》回去看語法書
main函數(shù)中是主線程,thrd_func中是子線程,返回的當(dāng)前線程ID當(dāng)然不一樣了!---------------------------》看操作系統(tǒng)相關(guān)書籍,理解下線程的概念

從調(diào)用pthread_create開始,進(jìn)程一分為2個線程,主線程繼續(xù)執(zhí)行main函數(shù),子線程執(zhí)行thrd_func函數(shù),兩個線程并行運(yùn)行
pthread_create執(zhí)行成功后tid里存放的是新建立的子線程的線程ID,自然與thrd_func中調(diào)用pthread_self的返回結(jié)果一致
而主線程中調(diào)用pthread_self卻是返回的主線程的id

如果main函數(shù)先執(zhí)行完成,即主線程結(jié)束,則子線程自動結(jié)束,整個進(jìn)程結(jié)束,回收所有資源
如果thrd_func函數(shù)先直接完成,即子線程先一步結(jié)束,則線程成為僵尸線程,并未回收其內(nèi)存,如果需要回收,請隨時從主線程中pthread_detach(分離)他,
如果主線程需要等待子線程返回,或者獲取其返回值,請?jiān)谥骶程中pthread_join他,調(diào)用Join后,子線程自動處于分離狀態(tài)

相關(guān)函數(shù)調(diào)用以及介紹,請查閱《posxi多線程程序設(shè)計(jì)》貌似絕版了,去淘寶找找吧!
作者: solitrarychen    時間: 2013-11-18 10:10
回復(fù) 3# ErenNo1


    多謝詳細(xì)解答,受益很多。




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2