Re: [問題] 請問pthread的問題
※ 引述《lackofblack (...)》之銘言:
: pthread_create(thrd, NULL, func, NULL);
: pthread_cancel(thrd);
: 以上每跑一陣子之後, pthread_create就會發生錯誤
: 請問是不是能create的thread數目有上限呢?
與其說 create thead 的數目有上限,
應該說, 你同時能 create thread 的數目有上限..
你這裡雖然用了 pthread_cancel,
但 pthread 預設的 cancel 方式是 PTHREAD_CANCEL_DEFERRED ,
也就是說, 你的 thread 並不會在你呼叫 pthread_cancel() 就被 cancel掉,
而是到了 pthread 的 cancellation point 才會被終止, "且" 資源被釋放
只有在這種其況下, thread 的資源才會被收回並用來建立其他的 thread
雖然用 PTHREAD_CANCEL_ASYNCHRONOUS 的方式可以 "立即" 終止該 thread,
可是用這種方式, thread 的資源回收可能無法被回收(看後端OS而異)...
而且較危險, 因為 thread 手邊的工作若還沒處理完, 可能會導致程式在不穩定的狀態
建議你可以查查 pthread cancellation point 的文件
: 就算把thread cancel掉也沒辦法嗎...
而依你的情形, 若你同時要建立的 thread 量很多,
或頻繁地需要有 thread 來處理事情, 這應該就要用推文所說的方式,
用固定的 thread 數目(一般建議是CPU數目的兩倍左右) 再配合一個 work queue,
不斷去 work queue 中查詢(poll)是否有新工作要做..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.194.146
討論串 (同標題文章)
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章
49
105