溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++怎么正確使用線程

發(fā)布時(shí)間:2021-11-25 15:56:03 來源:億速云 閱讀:145 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“C++怎么正確使用線程”,在日常操作中,相信很多人在C++怎么正確使用線程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++怎么正確使用線程”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

CP.26:不要分離線程

Reason(原因)

通常,生命周期超過創(chuàng)建它的線程的需求繼承自線程任務(wù),但是通過分離(detach)實(shí)現(xiàn)這個(gè)想法使得監(jiān)視和與分離的線程進(jìn)行通信更加困難。在特殊情況下,很難(雖然不是不可能)確保線程可以像期望的那樣中止或繼續(xù)動作。

Example(示例)

void heartbeat();

void use()
{
   std::thread t(heartbeat);             // don't join; heartbeat is meant to run forever
   t.detach();
   // ...
}

這段代碼是線程的合理用法,其中通常會使用detach()。雖然這個(gè)做法存在問題。我們?nèi)绾伪O(jiān)視一個(gè)分離的線程以便知道它是否處于活動狀態(tài)?心跳線程可能發(fā)生某些問題,對于需要心跳功能的系統(tǒng)來說,丟失心跳是很嚴(yán)重的問題。因此,我們需要和心跳線程通信(例如通過一個(gè)信息流或使用condition_variable的通知事件)。

An alternative, and usually superior solution is to control its lifetime by placing it in a scope outside its point of creation (or activation). For example:

另外一個(gè)可選的,通常是更高級的做法是將它放到創(chuàng)建它(或者激活它)的作用域之外。例如:

void heartbeat();

gsl::joining_thread t(heartbeat);             // heartbeat is meant to run "forever"

This heartbeat will (barring error, hardware problems, etc.) run for as long as the program does.

心跳線程將會和程序運(yùn)行同樣長的時(shí)間(除非發(fā)生錯(cuò)誤,硬件問題等情況)。

Sometimes, we need to separate the point of creation from the point of ownership:

有時(shí),我們需要將生成視點(diǎn)和所有權(quán)視點(diǎn)相分離。

void heartbeat();

unique_ptr<gsl::joining_thread> tick_tock {nullptr};

void use()
{
   // heartbeat is meant to run as long as tick_tock lives
   tick_tock = make_unique<gsl::joining_thread>(heartbeat);
   // ...
}
Enforcement(實(shí)施建議)

Flag detach().

標(biāo)記分離(detach)操作。

到此,關(guān)于“C++怎么正確使用線程”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI