C++ でテレメトリ システムをコーディングしていますが、特定のスレッドを標準の pthread_cond_timedwait および pthread_cond_broadcast と同期するのに苦労しています。
問題は、ブロードキャストを実行している関数が、別のスレッドがブロードキャストで動作しているかどうかを知るための何らかの方法が必要だったことです。
徹底的に調べた結果、代わりに 2 つのスレッドにバリアを使用してみることにしました。ただし、pthread_cond_timedwait のタイムアウト機能が必要でした。
これが基本的に私が思いついたものです:(しかし、それは過度に感じます)
Listen 関数:イベントが現在トリガーされているかどうかをミリ秒単位で確認します。
bool listen(uint8_t eventID, int timeout)
{
int waitCount = 0;
while(waitCount <= timeout)
{
globalEventID = eventID;
if(getUpdateFlag(eventID) == true)
{
pthread_barrier_wait(&barEvent);
return true;
}
threadSleep(); //blocks for 1 millisecond
++waitCount;
}
return false;
}
トリガー機能:トリガー期間の更新フラグを設定することにより、ミリ秒単位でイベントをトリガーします
bool trigger(uint8_t eventID, int timeout)
int waitCount = 0;
while(waitCount <= timeout)
{
setUpdateFlag(eventID, true); //Sets the update flag to true
if(globalEventID == eventID)
{
pthread_barrier_wait(&barEvent);
return true;
}
threadSleep(); //blocks for 1 millisecond
++waitCount;
}
setUpdateFlag(eventID, false);
return false;
}
私の質問: 放送局と情報を共有する別の方法はありますか、それとも障壁が本当に唯一の効率的な方法ですか? また、バリアを使用してタイムアウト機能を取得する別の方法はありますか?