我正在用 C++ 编写遥测系统,并且在将某些线程与标准 pthread_cond_timedwait 和 pthread_cond_broadcast 同步时遇到了一些困难。
问题是我需要一些方法让正在广播的函数知道另一个线程是否对广播起作用。
经过一番认真的搜索后,我决定我可以尝试为这两个线程使用屏障。但是,我仍然想要 pthread_cond_timedwait 的超时功能。
这基本上是我想出的:(但是感觉有点过分了)
侦听功能:检查一段时间以查看当前是否正在触发事件。
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;
}
我的问题:是与广播公司共享信息的另一种方式,还是障碍真的是唯一有效的方式?另外,是否有另一种方法可以通过障碍获得超时功能?