您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++怎么正確使用線程”,在日常操作中,相信很多人在C++怎么正確使用線程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++怎么正確使用線程”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
CP.26:不要分離線程
通常,生命周期超過創(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);
// ...
}
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í)用的文章!
免責(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)容。