日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

linux多線程

系統 2167 0

1、進程與線程

這是個老生常談的話題,我們只需要記住:

進程可是一個資源的基本單位,而線程是程序調度的基本單位,一個進程內部的線程之間共享進程獲得的時間片。線程擁有自己的棧,因為線程有自己的局部變量,其他的資源(文件描述字,全局變量等)和其他線程共享。

2、有關線程的函數

int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

參數說明:

thread:指向pthread_create類型的指針,用于引用新創建的線程。

attr:用于設置線程的屬性,一般不需要特殊的屬性,所以可以簡單地設置為NULL。

*(*start_routine)(void *):傳遞新線程所要執行的函數地址。

arg:新線程所要執行的函數的參數。

調用如果成功,則返回值是0,如果失敗則返回錯誤代碼。

void pthread_exit(void *retval);

參數說明:

retval:返回指針,指向線程向要返回的某個對象。

線程通過調用pthread_exit函數終止執行,并返回一個指向某對象的指針。不能指向局部變量…… 如下栗子:

View Code
        
          void
        
         threadFunc(
        
          char
        
         *
        
           arg){

    
        
        
          char
        
         result = 
        
          '
        
        
          d
        
        
          '
        
        
          ;

    printf(
        
        
          "
        
        
          %s\n
        
        
          "
        
        
          , arg);

    

    pthread_exit(
        
        &
        
          result);

}






        
        
          int
        
        
           main(){

    pthread_t t1;

    
        
        
          void
        
         *
        
           res;

    
        
        
          int
        
        
           s;

    

    s 
        
        = pthread_create(&t1, NULL, (
        
          void
        
         *)threadFunc, (
        
          void
        
         *)
        
          "
        
        
          hello world
        
        
          "
        
        
          );



    
        
        
          if
        
        (s != 
        
          0
        
        ) printf(
        
          "
        
        
          create failed\n
        
        
          "
        
        
          );



    s 
        
        = pthread_join(t1, &
        
          res);



    
        
        
          if
        
        (s != 
        
          0
        
        ) printf(
        
          "
        
        
          join failed\n
        
        
          "
        
        
          );

    

    printf(
        
        
          "
        
        
          thread return %c
        
        
          "
        
        ,*((
        
          char
        
         *
        
          )res));



    
        
        
          return
        
        
          0
        
        
          ;

}
        
      

?

int pthread_join(pthread_t thread, void ** retval);

參數說明:

thread: 線程標識符,即線程ID,標識唯一線程。   

retval: 用戶定義的指針,用來存儲被等待線程的返回值。

來源百度百科:代碼中如果沒有 pthread_join 主線程會很快結束從而使整個進程結束,從而使創建的線程沒有機會開始執行就結束了。加入 pthread_join 后,主線程會一直等待直到等待的線程結束自己才結束,使創建的線程有機會執行。   所有線程都有一個線程號,也就是 Thread ID 。其類型為 pthread_t 。通過調用 pthread_self() 函數可以獲得自身的線程號。

linux多線程


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 灵武市| 华池县| 曲松县| 方城县| 探索| 涪陵区| 保靖县| 京山县| 紫云| 德钦县| 周口市| 石林| 崇明县| 全椒县| 鹤峰县| 方正县| 广灵县| 隆安县| 永善县| 铜鼓县| 永和县| 盐山县| 封开县| 汝阳县| 平邑县| 丘北县| 清苑县| 平果县| 枞阳县| 永靖县| 建水县| 日土县| 长汀县| 乐至县| 玛曲县| 左贡县| 奇台县| 武宁县| 渑池县| 阿克苏市| 沙河市|