当前位置: 技术问答>linux和unix
这样的线程同步怎么实现
来源: 互联网 发布时间:2016-01-21
本文导语: 需求:程序一起来,线程1就一直用方法A在访问设备,线程2此时在监听串口,一旦串口有命令,线程1必须停止访问设备,此时线程2用方法B访问设备(线程2此时必须能及时访问设备),请问,我下面的做法能实现这个要求吗? 我调...
需求:程序一起来,线程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(),发觉有问题,我不稳定也是出在这里,请问有方法只延时其中一个线程吗?
我调试了下,功能是实现了,但是很不稳定.
线程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(),发觉有问题,我不稳定也是出在这里,请问有方法只延时其中一个线程吗?
|
试试使用线程库里面的条件等待函数,是线程安全的。
pthread_cond_timewait
最好封装成一个类或者函数,这样会很方便。
pthread_cond_timewait
最好封装成一个类或者函数,这样会很方便。
|
自己用time库写一个延时的程序吧,先取当前的时间,算出先要延时的时间,到时候了触发事件
|
条件变量, 另外,调高线程2的优先级.
|
新手学习中,好像那个pause()也可能起到延时的作用吧。