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

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2978 | 回復(fù): 3
打印 上一主題 下一主題

[C] 請教pthread_creat()問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-11-15 16:07 |只看該作者 |倒序瀏覽
  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的入口點,即馬上執(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. 還有一點不理解的地方是, 為什么在main函數(shù)中pthread_self()返回值是3079558848,而在void thrd_func( )函數(shù)中thread_sel()返回值是3079555952.
希望大家可以解答一下。

論壇徽章:
0
2 [報告]
發(fā)表于 2013-11-15 19:08 |只看該作者
tid是全局變量
main中的self為main線程tid,而函數(shù)里的是創(chuàng)建的tid,既然是創(chuàng)建的,tid總不能相同吧

論壇徽章:
0
3 [報告]
發(fā)表于 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(分離)他,
如果主線程需要等待子線程返回,或者獲取其返回值,請在主線程中pthread_join他,調(diào)用Join后,子線程自動處于分離狀態(tài)

相關(guān)函數(shù)調(diào)用以及介紹,請查閱《posxi多線程程序設(shè)計》貌似絕版了,去淘寶找找吧!

論壇徽章:
0
4 [報告]
發(fā)表于 2013-11-18 10:10 |只看該作者
回復(fù) 3# ErenNo1


    多謝詳細(xì)解答,受益很多。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP