問題タブ [lxrt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 関数の呼び出しスレッドが既に RTAI リアルタイムであるかどうかをどのように検出しますか?
カーネル空間とユーザー空間の両方で RTAI を使用する大きなプロジェクトに取り組んでいます。プロジェクトの詳細には触れませんが、問題が発生する場所を簡単に説明します。
ユーザー空間では、私のプロジェクトは、他の人がソフトウェアを作成するために使用するライブラリを提供します。これらのプログラム自体が RTAI リアルタイム スレッドを持っている場合があります。
現在、RTAI の一部の関数では、呼び出しスレッドが既にrt_thread_init
ed である必要があるため、ライブラリ内の関数でそれらを使用する場合は、呼び出しスレッドを一時的にリアルタイムにする必要がありrt_thread_init
ますrt_task_delete
。
ここに問題があります:
私の関数の呼び出しスレッドがすでにリアルタイムでrt_thread_init
ある場合、私は単純に失敗すると想定していますが、rt_task_delete
そのスレッドを非リアルタイムにします (スレッド自体が (何も変更されていないと仮定して)再びrt_task_delete
、RTAI がクラッシュします。
関数の呼び出しスレッドがリアルタイムでない場合、すべて問題ありません。
今のところ、呼び出し元の関数がリアルタイムかどうかをライブラリに通知できるように、関数内でパラメーターを取得することにしました。ただし、現在のスレッドがリアルタイムであるかどうかを自動的に検出するために使用できる関数または何かがあるかどうかを知りたかったのです。
ここに RTAI ユーザーがいるかどうかはわかりませんが (確かに RTAI タグは見ていません)、いることを願っています。
c++ - 殺されたスレッドに参加する必要がありますか?
ある時点ですべてを停止する必要がある結合可能なスレッドが多数あります。スレッドは pthread ですが、RTAI のユーザー空間インターフェースを介して作成されます (ただし、RTAI は気にしないでください)。
スレッドごとに、終了するように設定できる変数があります。だから私がすることは次のとおりです。
- 各スレッドにその変数を設定して、停止するようにします
- 最大で 1 秒待ちます
- スレッドに参加する
問題は、カーネル空間のバディ スレッドを使用する RTAI を使用しているため、何か問題が発生した場合、スレッドが応答しなくなる可能性があることです (発生したことはありませんが、念のため注意する必要があります)。何かがうまくいかない)。そのような場合、スレッドを殺すだけです。
それで、私の質問は、スレッドが殺されたら、そのスレッドに参加するべきjoin
かどうかです。