读书人

这样的线程同步如何实现

发布时间: 2012-02-07 17:45:36 作者: rapoo

这样的线程同步怎么实现
需求:程序一起来,线程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
最好封装成一个类或者函数,这样会很方便。

读书人网 >UNIXLINUX

热点推荐