您好,登錄后才能下訂單哦!
本篇內容介紹了“C++怎么回避線程的生成和銷毀處理”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
CP.41:盡量回避線程的生成和銷毀處理
Thread creation is expensive.
創建線程代價高昂。
Example(示例)
void worker(Message m)
{
// process
}
void dispatcher(istream& is)
{
for (Message m; is >> m; )
run_list.push_back(new thread(worker, m));
}
代碼中為每個消息生成一個線程,而且run_list很可能準備在任務結束時銷毀它們。
作為改善,我們可以準備一組事先生成的工作線程來處理這些消息。
Sync_queue<Message> work;
void dispatcher(istream& is)
{
for (Message m; is >> m; )
work.put(m);
}
void worker()
{
for (Message m; m = work.get(); ) {
// process
}
}
void workers() // set up worker threads (specifically 4 worker threads)
{
joining_thread w1 {worker};
joining_thread w2 {worker};
joining_thread w3 {worker};
joining_thread w4 {worker};
}
If your system has a good thread pool, use it. If your system has a good message queue, use it.
如果你的系統包含一個優秀的線程池,使用它。如果你的系統包含一個優秀的消息隊列,使用它。
“C++怎么回避線程的生成和銷毀處理”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。