sem_init()初始化一个信号量后,如果在没注意情况下sem_post发生,信号量的值会加1,如果sem_wait没有相应执行,等到需要等待某个sem_post发生,才sem_wait退出时,会发现sem_wait不等待阻塞,直接执行后面语句;
这是因为当信号量的值大于0时,sem_wait将信号量值减1后,直接退出阻塞,只有信号量的值等于0时,sem_wait才会阻塞;
这时,可以在sem_wait之前执行下面语句,将信号量的值减少到0。
int val=0;
sem_getvalue(&PlaybackDevDrvImp::s_dataEvent, &val);
while(val != 0)
{
sem_trywait(&PlaybackDevDrvImp::s_dataEvent);
sem_getvalue(&PlaybackDevDrvImp::s_dataEvent, &val);
}