亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

線程之線程的創建

2024-06-28 13:28:25
字體:
來源:轉載
供稿:網友
線程之線程的創建

在傳統的UNIX進程模型中,每個進程只有一個控制線程。從概念上講,這與基于線程的模型中只包含一個線程是相同的。在POSIX線程(pthread)的情況下,程序開始運行時,它也是以單進程中的單個控制線程啟動的,在創建多個控制線程以前,程序的行為與傳統的進程并沒有什么區別。新增的線程可以通過調用pthread_create函數創建

#include <pthread.h>int pthread_create(pthread_t *restrict tidp,                  const pthread_attr_t *restrict attr,                  void *(*start_rtn)(void *), void *restrict arg);返回值:若成功則返回0,否則返回錯誤編號

當pthread_create成功返回時,由tidp指向的內存單元被設置為新創建的線程的線程ID。attr參數用于定制各種不同的線程屬性。線程屬性在以后介紹,眼下暫時把它設置為NULL,創建默認屬性的線程。

新創建的線程從start_rtn函數的地址開始運行,該函數只有一個無類型指針參數arg,如果需要向start_rtn函數傳遞的參數不止一個,那么需要把這些參數放到一個結構中,然后把這個結構的地址作為arg參數傳入

線程創建時并不能保證哪個線程會先運行:是新創建的線程還是調用線程。新創建的線程可以訪問進程的地址空間,并且繼承調用線程的浮點環境和信號屏蔽字,但是該線程的未決信號集被清除。

注意pthread函數在調用失敗時通常會返回錯誤碼,它們并不像其他的POSIX函數一樣設置errno。每個線程都提供errno的副本,這只是為了與使用errno的現有函數兼容。在線程中,從函數中返回錯誤碼更為清晰整潔,不需要依賴那些隨著函數執行不斷變化的全局狀態,因而可以把錯誤的范圍限制在引起出錯的函數中。

實例

雖然沒有可移植的方法打印線程ID,但是可以寫一個小的測試程序來完成這個任務,以便更深入地了解線程是如何工作的。程序清單11-1中創建了一個線程并且打印進程ID、新線程的線程ID以及初始線程的線程ID。

程序清單11-1 打印線程ID

#include "apue.h"#include <pthread.h>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);}intmain(void){    int    err;            err = pthread_create(&ntid, NULL, thr_fn, NULL);    if(err != 0)        err_quit("can't create thread: %s/n", strerror(err));    printids("main thread: ");    sleep(1);    exit(0);}

編譯上面程序過程中遇到了undefined reference to ‘pthread_create’的問題:

未命名

首先,檢查了函數名,沒有寫錯;然后檢查了頭文件<pthread.h>,也包含了。這種摸不著頭腦的問題總是讓人很糾結的......最終在網上找到了出現該問題的原因及其解決方案,參考自:http://blog.csdn.net/llqkk/article/details/2854558

問題原因: pthread 庫不是 linux 系統默認的庫,連接時需要使用靜態庫 libpthread.a,所以在使用pthread_create()創建線程,以及調用 pthread_atfork()函數建立fork處理程序時,需要鏈接該庫。 解決方案: 在編譯中要加 -lpthread參數

未命名

問題解決了就OK了嗎?當然不行,由此問題恰好暴露了之前學過的一些知識其實并沒有真正吃透,學的時候理解,遇到問題的時候卻想不起來。其實上面出現的這個問題牽涉到了之前學過的如下兩個知識點:

(1)軟件開發工具GCC http://www.CUOXin.com/nufangrensheng/p/3426405.html。注意其中的GCC鏈接選項部分。

(2)UNIX標準化及實現之POSIX標準可選頭文件 http://www.CUOXin.com/nufangrensheng/p/3496116.html。從中可以看到pthread.h是POSIX標準的可選頭文件,也就是說pthread庫不是Linux系統默認的庫,鏈接時需要使用靜態庫libpthread.a。

更多關于undefined reference to...的問題可參考:http://ticktick.blog.51cto.com/823160/431329

現在我們言歸正傳,從程序清單11-1運行結果來看,兩個線程的進程ID相同,但線程ID不同。不過這不是絕對的,依賴于具體的實現。

這個實例有兩個需要注意的地方:

(1)需要處理主線程和新線程之間的競爭。首先是主線程需要休眠,如果主線程不休眠,它就可能退出,這樣在新線程有機會運行之前整個進程可能就已經終止了。這種行為特征依賴于操作系統中的線程實現和調度算法。

(2)新線程是通過調用pthread_self函數獲取自己的線程ID,而不是從共享內存中讀出或者從線程的啟動例程中以參數的形式接收到?;貞沺thread_create函數,它會通過第一個參數(tidp)返回新建線程的線程ID。在本例中,主線程把新線程ID存放在ntid中,但是新建的線程并不能安全地使用它,如果新線程在主線程調用pthread_create返回之前就運行了,那么新線程看到的是未經初始化的ntid的內容,這個內容并不是正確的線程ID。

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美区在线播放| 国产精品一二三视频| 成人黄色免费看| 久久久女人电视剧免费播放下载| 亚洲一区二区三区成人在线视频精品| 精品视频久久久| 国产精品专区一| 精品久久中文字幕| 国产噜噜噜噜噜久久久久久久久| 亚洲成人免费网站| 国产精品国产三级国产aⅴ浪潮| 粗暴蹂躏中文一区二区三区| 成人性生交大片免费看视频直播| 日韩在线视频免费观看| 国产精品男人的天堂| 国产精品青青在线观看爽香蕉| 成人av在线天堂| 国产精品狼人色视频一区| 欧美性猛交xxxx乱大交| 国产精品国模在线| 欧美日韩一区二区在线播放| 国产精品久久久一区| 国产精品永久在线| 国产精品pans私拍| 国产精品美女午夜av| 一区二区成人av| 精品亚洲国产成av人片传媒| 亚洲第一视频网| 中文字幕欧美日韩精品| 亚洲精品91美女久久久久久久| 国产精品自产拍在线观| 91手机视频在线观看| 亚洲精品v天堂中文字幕| 亚洲欧美另类人妖| 国产精品永久免费| 国产精品扒开腿做爽爽爽男男| 国产精品成人av性教育| 亚洲天堂av综合网| 欧美大荫蒂xxx| 久久久免费高清电视剧观看| 国产精品视频午夜| 久久久久久97| 国产女人18毛片水18精品| 成人日韩在线电影| 亚洲国产欧美一区二区三区久久| 在线亚洲午夜片av大片| 亚洲成人激情视频| 91精品国产91久久久久久不卡| 一区二区三区美女xx视频| 中文字幕日韩在线观看| 国产女人18毛片水18精品| 在线精品91av| 丁香五六月婷婷久久激情| 亚洲欧美国产精品专区久久| 美女性感视频久久久| 亚洲成人精品在线| 日韩高清不卡av| 色一情一乱一区二区| 日本精品视频在线| 国产精品扒开腿做| 国产精品欧美风情| 国产精品com| 久久精品99久久久久久久久| 亚洲视频专区在线| 亚洲国产成人爱av在线播放| 国产成人精品国内自产拍免费看| 欧美精品久久一区二区| 91在线中文字幕| 国产一区二区三区高清在线观看| 黄色成人av网| 一区二区三区无码高清视频| 亚洲精品女av网站| 一区二区三区精品99久久| 亚洲色图综合网| 中文字幕亚洲欧美日韩2019| 精品久久久在线观看| 91chinesevideo永久地址| 91久久精品国产| 精品国产一区二区三区久久久| 狠狠躁夜夜躁人人躁婷婷91| 亚州国产精品久久久| 2020欧美日韩在线视频| 91精品国产综合久久久久久蜜臀| 久久手机免费视频| 国产成人啪精品视频免费网| 91精品国产99| 亚洲电影免费观看高清完整版| 欧美一性一乱一交一视频| 国产精品久久久久久久久粉嫩av| 国产日韩在线播放| 日韩av资源在线播放| 欧美最猛性xxxxx亚洲精品| 国产精品999| 2019国产精品自在线拍国产不卡| 国产精品国产三级国产专播精品人| 91免费看片在线| 伊人成人开心激情综合网| 国产精品久久久久久一区二区| 中日韩午夜理伦电影免费| 亚洲成人久久电影| 午夜精品一区二区三区在线视频| 欧美日韩国产成人在线| 国产精品稀缺呦系列在线| 欧美成人免费在线视频| 国产91免费看片| 亚洲精品国产精品久久清纯直播| 欧美激情精品久久久久久变态| 国产91精品视频在线观看| 亚洲国产精品一区二区三区| 国语自产偷拍精品视频偷| 亚洲性无码av在线| 成人黄色av播放免费| 亚洲精品日韩久久久| 欧美一级视频一区二区| 久久好看免费视频| 亚洲精品国产福利| 神马国产精品影院av| 欧美福利在线观看| 91产国在线观看动作片喷水| 欧美最猛性xxxxx免费| 九九精品视频在线观看| 欧美激情videos| 欧洲s码亚洲m码精品一区| 日韩av最新在线| 国模精品系列视频| 4k岛国日韩精品**专区| 亚洲第一天堂无码专区| 国产在线观看一区二区三区| 亚洲一区二区黄| 夜夜嗨av一区二区三区四区| 久久精品国产亚洲7777| 欧美日韩爱爱视频| 黄色91在线观看| 91美女高潮出水| 日韩在线观看网址| 国产一区二区三区免费视频| 国产91ⅴ在线精品免费观看| 国产91九色视频| 91久久国产精品| 久久久久久久成人| 亚洲成人av片| 久久99久久亚洲国产| 亚洲欧美日韩视频一区| 成人h猎奇视频网站| 欧美一级高清免费播放| 色偷偷av一区二区三区| 久久久999国产| 久久精品国产欧美激情| 午夜精品福利视频| 亚洲石原莉奈一区二区在线观看| 久久久久久国产| 国产精品自拍小视频| 国产精品99导航| 成人免费看吃奶视频网站| 欧美精品电影免费在线观看| 色爱精品视频一区| 亚洲精品电影在线观看| 欧美性猛交xxxx乱大交极品| 国产欧美一区二区三区久久| 国产精品久久久久久久久久久久| 38少妇精品导航| 国产极品精品在线观看| 欧美成年人网站| 人妖精品videosex性欧美|