多執行緒的一些小知識(不斷補充)

2021-09-05 09:13:04 字數 741 閱讀 1568

最近學了一些c++多執行緒知識看的書是c++多執行緒實戰程式設計,就順便做一些筆記來幫助記憶。

1、如何構建乙個hello world的多執行緒函式程式

首先建立乙個hello world函式 void helloworld()

接著建立乙個執行緒加入函式指標 std::thread t1(helloworld);

接著t1.join()完成程式設計,如下所示

2、join和detach的區別

detach和join函式來啟動被調執行緒,區別在於兩者是否阻塞主調執行緒。

當使用join()函式時,主調執行緒阻塞,等待被調執行緒終止,然後主調執行緒**被調執行緒資源,並繼續執行;join()是簡單粗暴的等待執行緒完成或不等待。當你需要對等待中的執行緒有更靈活的控制時,比如,看一下某個執行緒是否結束,或者只等待一段時間(超過時間就判定為超時)。

當使用detach()函式時,主調執行緒繼續執行,被調執行緒駐留後台執行,主調執行緒無法再取得該被調執行緒的控制權。當主調執行緒結束時,由執行時庫負責清理與被調執行緒相關的資源。使用detach()會讓執行緒在後台執行,這就意味著主線程不能與之產生直接互動。也就是說,不會等待這個執行緒結束;如果執行緒分離,那麼就不可能有 std::thread 物件能引用它,分離執行緒的確在後台執行,所以分離執行緒不能被加入。不過c++執行庫保證,當執行緒退出時,相關資源的能夠正確**,後台執行緒的歸屬和控制c++執行庫都會處理。

多執行緒的一些小記

之前寫過一些多執行緒程式,基本上都是執行緒競爭條件比較少或者說沒有,所以基本上沒有碰見過死鎖以及其他情況,以至於我自以為多執行緒的使用也並沒那麼難。如之前我寫過的一篇乙個簡單的生產者與消費者,那時候寫得也不太好,大概是使用乙個互斥量去保護物品佇列的獲取與生產,乙個條件變數去判斷佇列是否為滿或者空 以...

多執行緒的一些小問題集錦

測試執行緒是否已經死亡,可以呼叫isalive 方法.當執行緒處於就緒 執行 阻塞三種狀態時,返回true 當執行緒處於死亡 新建狀態時返回false。例項 如下 package com.thread public class startdead extends thread public stat...

一些小知識

1.答 int elev 10 0.5 10 3答 arctoolbox中有直接的工具!data management tools features feature to polygon 4如何用arcgis實現指定範圍的dem水平切面 主要是想實現dem和水面結合的三維效果 但如何計算水面範圍 答...