日期:2014-05-16  浏览次数:20661 次

这样的线程同步怎么实现
需求:程序一起来,线程1就一直用方法A在访问设备,线程2此时在监听串口,一旦串口有命令,线程1必须停止访问设备,此时线程2用方法B访问设备(线程2此时必须能及时访问设备),请问,我下面的做法能实现这个要求吗?
我调试了下,功能是实现了,但是很不稳定.

线程1
sem_wait(&(conf-> job_count));
pthread_mutex_lock   (&(conf-> mutex));
用方法A访问设备
sem_post(&(conf-> job_count));
pthread_mutex_unlock   (&(conf-> mutex));

线程2
select(串口)
sem_wait(&(conf-> job_count));
pthread_mutex_lock   (&(conf-> mutex));
用方法B访问设备
sem_post(&(conf-> job_count));
pthread_mutex_unlock()

还有,我必须得在线程2中延时,我现在采用sleep(),发觉有问题,我不稳定也是出在这里,请问有方法只延时其中一个线程吗?


------解决方案--------------------
新手学习中,好像那个pause()也可能起到延时的作用吧。
------解决方案--------------------
自己用time库写一个延时的程序吧,先取当前的时间,算出先要延时的时间,到时候了触发事件
------解决方案--------------------
条件变量, 另外,调高线程2的优先级.

------解决方案--------------------
试试使用线程库里面的条件等待函数,是线程安全的。
pthread_cond_timewait
最好封装成一个类或者函数,这样会很方便。