一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

線程的創(chuàng)建與終止

 書永夜 2013-11-17
         
1.判斷兩個線程是否相等
    int pthread_equal(pthread_t tid1,pthread_t tid2);頭文件包含<pthread.h>,若相等則返回非0,否則返回0.

2.獲得自身線程ID
    pthread_t pthread_self(void);頭文件包含<pthread.h>,返回值返回調用線程的線程ID,無出錯返回。

3.線程的創(chuàng)建
    int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,
    void *(*start_rtn),void *restrict arg);頭文件包含<pthread.h>;若成功則返回0,否則返回錯誤編號。
參數(shù):
    tidp:新創(chuàng)建線程的線程ID。
    attr:定制各種不同的線程屬性。NULL,表示創(chuàng)建默認屬性的線程。
    start_rtn:新創(chuàng)建的線程從start_rtn函數(shù)的地址開始運行,該函數(shù)只有一個無類型指針參數(shù)arg,如果需要
    向start_rtn函數(shù)傳遞的參數(shù)不止一個,那么需要把這些參數(shù)放到一個結構中,再把這個結構的地址作為arg參數(shù)傳入。
注意:
    1.線程創(chuàng)建時并不能保證哪個線程會先運行,新創(chuàng)建的線程可以訪問進程的地址空間,并且繼承調用線程的浮點環(huán)境和信號
    屏蔽字,但是該線程的未決信號集被清除。
    2.主線程把新線程ID存放在tidp中,但是新建的線程并不能安全地使用它,如果新線程在主線程調用pthread_create返回
    之前就運行了,那么新線程看到的是未經(jīng)初始化的tidp的內容,這個不是正確的線程ID.故可用pthread_self函數(shù)獲取。

4.線程終止
    1.如果進程中的任一線程調用了exit,_Exit或者_exit,那么整個進程就會終止。

    2.單個線程可以通過下列三種方式退出,在不終止整個進程的情況下停止它的控制流。
      a.線程只是從啟動例程中返回,返回值是線程的退出碼。(即正常死亡,return NULL)
      b.線程可以被同一進程中的其它線程取消。(即謀殺,pthread_cancel)
      c.線程調用pthread_exit。(即自殺)

    3.void pthread_exit(void *rval_ptr);包含頭文件<pthread.h>;rval_ptr是一個無類型指針,與傳給啟動例程
    的單個參數(shù)類似。進程中的其他線程可以通過調用pthread_join函數(shù)訪問到這個指針。

    4.int pthread_join(pthread_t thread,void **rval_ptr);包含頭文件<pthread.h>;成功返回0,失敗錯誤編號。
注意:
    a.調用線程將一直阻塞,直到指定的線程調用pthread_exit,從啟動例程中返回或被取消。
    b.如果線程只是從它的啟動例程返回,rval_ptr將包含返回碼。如果線程被取消,由rval_ptr指定的內存單元就置為
    PTHREAD_CANCELED.
    c.指針可以傳遞包含更復雜信息的結構的地址,但是注意這個結構所使用的內存在調用者完成調用以后必須仍然有效,否
    則就會出現(xiàn)無效或非法內存訪問(為了解決這個問題,可以使用全局結構,或者用malloc函數(shù)分配結構。)

    5.int pthread_cancel(pthread_t tid);包含頭文件<pthread.h>;成功返回0,否則返回錯誤編號。
注意:
    a.等同于調用了參數(shù)為PTHREAD_CANCELED的pthread_exit函數(shù),但是線程可以選擇忽略取消方式或是控制取消方式。
    它僅僅提出請求。
    b.線程可以安排它退出時需要調用的函數(shù),即線程清理處理程序。
    void pthread_cleanup_push(void (*rtn)(void *),void *arg);
    void pthread_cleanup_pop(int execute);
    c.當execute的參數(shù)為0時,線程的自然死亡并不執(zhí)行線程清理處理程序。而其余兩種都行。當execute的參數(shù)
    非0時,線程的自然死亡也能執(zhí)行該清理處理程序。

    6.int pthread_detach(pthread_t tid);包含頭文件<pthread.h>;若成功返回0,否則返回錯誤編號。
注意:在默認情況下,線程的終止狀態(tài)會保存到對該線程調用pthread_join,如果線程已經(jīng)處于分離狀態(tài),線程的底層
    存儲資源可以在線程終止時立即被收回。當線程被分離時,并不能用pthread_join函數(shù)等待它的終止狀態(tài)。
    對分離態(tài)的線程進行pthread_join的調用會產(chǎn)生失敗,返回EINVAL。

    7.線程同步
     a.互斥量:(mutex)
    b.int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t
    *restrict attr);初始化互斥量。成功返回0,失敗返回錯誤編號。
    c.int pthread_mutex_destroy(pthread_mutex_t *mutex);摧毀互斥量。成功返回0,失敗返回錯誤編號。
    d.int pthread_mutex_lock(pthread_mutex_t *mutex);上鎖;成功返回0,否則返回錯誤編號。
    e.int pthread_mutex_trylock(pthread_mutex_t *mutex);嘗試上鎖
    f.int pthread_mutex_unlock(pthread_mutex_t *mutex);解鎖





























































    
    



























  

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    精品人妻一区二区三区在线看| 六月丁香六月综合缴情| 91蜜臀精品一区二区三区| 蜜臀人妻一区二区三区| 成人免费在线视频大香蕉| 中文字幕乱码亚洲三区| 男人大臿蕉香蕉大视频| 欧美日韩三区在线观看| 久久精品欧美一区二区三不卡| 成年人免费看国产视频| 少妇特黄av一区二区三区| 日韩精品区欧美在线一区 | 国产一区一一一区麻豆| 午夜视频成人在线免费| 欧美日韩精品一区免费| 亚洲天堂男人在线观看| 国产精品涩涩成人一区二区三区| 亚洲综合香蕉在线视频| 成年人黄片大全在线观看| 国产精品久久精品国产| 五月婷婷缴情七月丁香| 日韩黄片大全免费在线看| 男女激情视频在线免费观看| 欧美大胆美女a级视频| 日本午夜免费观看视频| 成人综合网视频在线观看| 亚洲中文字幕视频一区二区| 污污黄黄的成年亚洲毛片| 国产成人av在线免播放观看av | 日本高清视频在线观看不卡 | 欧美日韩在线视频一区| 成人午夜爽爽爽免费视频| 一区二区日韩欧美精品| 出差被公高潮久久中文字幕| 国产精品一区二区视频大全| 日本加勒比中文在线观看| 国产亚洲精品香蕉视频播放| 精品视频一区二区不卡| 黄片三级免费在线观看| 欧美一区二区三区五月婷婷| 久久99精品国产麻豆婷婷洗澡 |