Re: [問題] 請問pthread的問題

看板LinuxDev作者 (躂躂..)時間16年前 (2009/04/27 15:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #19zLWniV (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #19zLWniV (LinuxDev)