我有類A和類B和C. 類B運行一個線程,類C運行n個線程。類A應該啓動線程並等待來自用戶的信號(例如Linux中的Ctrl-c) - 類A將停止所有線程(類B和C),做一些最後的工作並且應用程序將退出。關於線程的設計問題
現在的問題是:A類應該如何休眠直到信號收到?什麼是最好的實施?
我有類A和類B和C. 類B運行一個線程,類C運行n個線程。類A應該啓動線程並等待來自用戶的信號(例如Linux中的Ctrl-c) - 類A將停止所有線程(類B和C),做一些最後的工作並且應用程序將退出。關於線程的設計問題
現在的問題是:A類應該如何休眠直到信號收到?什麼是最好的實施?
做一些關於自旋鎖的研究。這是一個非常基本的併發問題。
也有點寬泛而不知道其他線程正在做什麼。
從問題「類C運行n個線程」。除非OP爲n指定了一個值,否則這個位會使我使用自旋鎖。如果n是一個很大的數字,那麼自旋鎖可能會相當多地競爭。這對性能有着非常不好的影響,因爲所有線程在旋轉時都會消耗CPU週期,並可能導致嘗試完成某些工作的線程中斷。使用某種具有退避機制的自適應旋轉鎖可以緩解這種情況,但並不總是針對每個平臺都實施。 – Glen 2010-03-09 17:46:58
您可能想要檢查sigwait。該方法需要一組信號並等待信號到達。
從答案中不清楚A級應該如何睡覺,直到收到信號。順便說一句,pthread_cond_signal()不是信號處理程序中要使用的信號安全函數。 – Corwin 2010-03-09 18:49:36