主線程和子執行緒總結

2021-06-27 20:11:55 字數 1693 閱讀 5600

執行結果

從上面可以看到:

如果主線程和子執行緒是並行的,雖然都是用while(1)但是倚靠

cpu的排程,主線程和子執行緒都有機會得到執行。

如果要在子執行緒裡面改變主線程裡面的資料,就在

pthread_create

裡面的最後 乙個引數使用傳位址呼叫(void *)&c,否則使用傳值呼叫(void *)c

使用pthread_join的目的在於:怕主線程執行的過快,子執行緒還沒有執行

主線程就執行完畢並且退出了。

使用detach屬性的目的在於,使得主線程和子執行緒之間割斷聯絡,主線程退出

子執行緒也不會掛掉,子執行緒 退出,主線程也不用**子執行緒的資源。

因為在本例子中,主線程和子執行緒都是無限迴圈執行的,即壽命無限長,主線程

和子執行緒也不用關心誰先得到執行,也不用關心資源的**,所以呼叫pthread_create

的使用也就沒有**pthread_t tt這個用於管理子裝置號的id,也沒用呼叫pthread_join來

等待子執行緒退出。

這是乙個可以精確控制線程何時結束的例子。

執行緒裡面使用while迴圈不斷的執行。如果想要使得執行緒

結束執行,只要使得那個enable = false就ok了。

這裡主線程建立子執行緒之後,使用pause();函式,主線程

就一直阻塞在pause函式裡面,直到捕捉到某個訊號,這裡面

定義的是ctrl+c訊號,捕捉到ctrl+c後,程式跳轉到了函式handler

_mini裡面執行。

然後就往下執行,執行pthread_join**子執行緒的資源。最後

返回。

程式執行結果如下:

如果程式不適用signal註冊,而是直接用pause函式

那麼,程式接收到訊號後,預設是終結整個程序

主線程和子執行緒

子執行緒通過 handlerthread的thread.getlooper 繫結,在主線程的handler的handlermessage中呼叫threadhandler.sendmessagedelay msg,1000 向子執行緒傳送訊息。在子執行緒中通過handler.sendmessagede...

主線程和子執行緒

主線程負責管理由它建立的子執行緒,建立 啟動 掛起 停止等。主線程通過發訊息的方式管理子執行緒,例如,給子執行緒傳送start 訊息,子執行緒啟動,子執行緒執行入口的run 方法。thread有下面兩個構造方法 thread runnable target,string name thread ru...

子執行緒和 主線程 互換

package demo 子執行緒迴圈5次,主線程迴圈10次。依次交替。整個交替迴圈3次 public class threadtest static void init start new thread new runnable start print package demo 兩個方法之間互斥 ...