POSIXのタイマースレッドを使いたい

realteckです. 仕事でPOSIX Thread,pthread系の関数を使う機会があったので,忘れないうちにログをつけておきます.

そもそもPOSIXは,システムインタフェースの規格で,IEEEに策定されています. このうち,POSIX 1003.1bに関しては,リアルタイムなオペレーション向けに拡張された,オプショナルな関数によって構成されます. この1003.1b内のPOSIX Timerでは,周期的なタスク実行のため,timer_create()を始めとした関数が用意されています.

timer_create()は,timer_t型の構造体に周期動作の設定を記述し,引数にすることで使用できますが, その実,中身はというと,nanosleepとスレッド実行する関数を切り替えているに過ぎません. そもそも構造体に設定を記述して実行させるスタイルが,古いデザインなように思い,POSIX Timerのラッパーを探しました.

いくつかネット上にソースを上げている方がいますが,真に継承しているものは,boost::threadになるでしょう. しかし,多くがpthreadの拡張にとどまっており,timer_createのラッパーらしいライブラリは存在しません. (私のサーベイ力では見つけられなかったので,どなたか教えてください)

そこで,周期実行を主とするロボットやリアルタイムなサーバ処理を記述する場合,割とお手製のスケジューラを組む必要が出てきます. 特にC++なんかは多いのでしょうか,企業ではこの手のライブラリがある意味の資産として,引き継がれることも少なくありません.

ROS実行も結局はリアルタイムノードの構築が難しいことから,この手のミドルウェアは解決になっていません. とすると,汎用POSIXの上にラッパーを構築するのが手早い気がします. さて,問題は自分で作るべきか,すでにうまい具合に作られたシステムがあるか.

余談ですが,近年はマイコン環境にもPOSIXの使えるOSも増えているので,ラッパーを作ることに少なからず意味はあるでしょう. 仮にROS互換のインターフェースが実装できれば,リアルタイムタスクはこのラッパーに,そうでない重い処理やオフライン処理はROSに,といった作業の分担ができますね.

誰かやってくれないかなぁ〜...