[原創]手把手教你Linux下的多線程設計--Linux下多線程編程詳解(二)

來源:互聯網
上載者:User

本文可任意轉載,但必須註明作者和出處。

【原創】手把手教你Linux下的多線程設計(一)
                                      --Linux下多線程編程詳解  原創作者:Frozen_socker(冰棍)    E_mail:dlskyfly@163.com

接下來,再看另兩個重要的函數pthread_exit和pthread_join

函數原型如下:

void pthread_exit( void * value_ptr );

 

 

線程的終止可以是調用了pthread_exit或者該線程的常式結束。也就是說,一個線程可以隱式的退出,也可以顯式的調用pthread_exit函數來退出。

 

 

pthread_exit函數唯一的參數value_ptr是函數的傳回碼,只要pthread_join中的第二個參數value_ptr不是NULL,這個值將被傳遞給value_ptr。

函數原型如下:

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

 

函數pthread_join的作用是,等待一個線程終止。

 

 

調用pthread_join的線程將被掛起直到參數thread所代表的線程終止時為止。pthread_join是一個線程阻塞函數,調用它的函數將一直等到被等待的線程結束為止。

如果value_ptr不為NULL,那麼線程thread的傳回值儲存在該指標指向的位置。該傳回值可以是由pthread_exit給出的值,或者該線程被取消而返回PTHREAD_CANCELED。

 

 
當一個非分離的線程終止後,該線程的記憶體資源(線程描述符和棧)並不會被釋放,直到有線程對它使用了pthread_join時才被釋放。因此,必須對每個建立為非分離的線程調用一次pthread_join調用,以避免記憶體流失。否則當線程是可分離的,調用pthread_exit,將終止該調用線程,並釋放所有資源,沒有線程等待它終止。

 

 

至多隻能有一個線程等待給定的線程終止。如果已經有一個線程在等待thread線程終止了,那麼再次調用pthread_join等待同一線程的線程將返回一個錯誤。

//example_2.c
#include <stdio.h>
#include <pthread.h>

void * pthread_func_test(void * arg);

int main()
...{
    pthread_t pt1,pt2;
    pthread_create(&pt1,NULL,pthread_func_test,"This is the Thread_ONE");
    pthread_create(&pt2,NULL,pthread_func_test,"This is the Thread_TWO");
    pthread_join(pt1,NULL);
    pthread_join(pt2,NULL);        //這行不寫,會發生什嗎?或寫成pthread_join(pt1,NULL);又會怎麼樣?
}

void * pthread_func_test(void * arg)
...{
    printf("%s  ",arg);
    pthread_exit(NULL);            //顯式聲明
}

 

到此為止,我們就學習了三個重要的函數--create、exit、join,下一篇,繼續講解多線程編程中的線程互斥問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.