我打算使用timerfd_create
以C語言編寫一個小型計時器庫。使用select實現計時器
這個庫的基本用戶將有兩個線程
- 應用程序線程
- 計時器線程
將會有這兩個線程之間的隊列,以便每當應用程序要啓動一個計時器,它會將消息推送到計時器線程將讀取的隊列中,併爲其創建一個FD並將其放入select
。
上述方法的問題在於,作爲單線程的計時器線程將在select
系統調用中被阻止,並且不知道是否有消息已發佈到他的接收隊列中以啓動計時器。
解決此問題的一種方法是讓選擇超時每「滴答」一次,然後檢查隊列中的消息。他們是更好的方法來做到這一點? 我也想過在每次應用程序在select
隊列中放置一條消息以中斷select
時引發中斷。這對多線程應用程序有效嗎?
平臺:Unix
你計劃如何計時器和應用程序線程交互? – 2010-08-18 09:22:04
通過兩個線程之間的隊列 – 2010-08-18 13:12:59
請參閱:https://stackoverflow.com/q/2328127/1153319 – 2017-11-04 05:12:42