Я планирую написать небольшую библиотеку таймеров на C, используя timerfd_create
.
Основной пользователь этой библиотеки будет иметь два потока
- Поток приложений
- Таймер резьбы
Между этими двумя потоками будет очередь, поэтому, когда приложение хочет запустить таймер, оно помещает в очередь сообщение, которое поток таймера затем читает, создает для него FD и помещает его в * 1012. *.
Проблема с вышеуказанным подходом состоит в том, что поток таймера, являющийся одним потоком, будет заблокирован в системном вызове select
и не будет знать, было ли отправлено сообщение в его очереди приема для запуска таймера.
Одним из способов решения этой проблемы является включение таймаута выбора в каждый «тик», а затем проверка сообщений в очереди. Это лучший способ сделать это?
Я также думал о создании прерывания каждый раз, когда приложение помещает сообщение в очередь select
, чтобы прервать select
. Это хорошо работает с многопоточными приложениями?
Платформа: Unix