一 Linux--多線程( 五 )

運行結果如下:

一 Linux--多線程

文章插圖
pthread_join函數會阻塞主線程 , 只有等待線程執行完畢線程處理函數之后 , 才會繼續執行主進程 。
總結:
  • 如果thread線程通過return返回,retval所指向的單元里存放的是thread線程函數的返回值 。
  • 如果thread線程被別的線程調用pthread_ cancel異常終掉,retval所指向的單元里存放的是常數PTHREAD_CANCELED(-1) 。
  • 如果thread線程是自己調用pthread_exit終止的,retval所指向的單元存放的是傳給pthread_exit的參數 。
  • 如果對thread線程的終止狀態不感興趣,可以傳NULL給retval參數 。
線程分離為了解決線程阻塞的問題,提出了線程分離,防止因為阻塞而造成的資源浪費 。
  • 一般情況下,線程終止后,其終止狀態會一直保留到其他線程調用pthread_join獲取它的狀態為止 。但是線程也可以被設置成detach狀態,這樣的線程一旦中止就立刻回收它占有的所有資源,而不保留終止狀態 。
  • 不能對一個已經處于detach狀態的線程調用pthread_join,這樣的調用將返回EINVAL錯誤 。也就是說,如果已經對一個線程調用了pthread_detach就不能再調用pthread_join了 。
int pthread_detach(pthread_t thread);功能: 使調用線程與當前進程分離,分離后不代表不依賴當前線程,線程分離的目的是將資源回收的工作交給系統來處理,也就說當被分離的線程結束之后,系統將自動回收它的資源,所以此函數不會阻塞,由內核自動完成線程資源的回收,不再阻塞參數: thread:線程號返回值: 成功:0 失敗:非0【一 Linux--多線程】

推薦閱讀