当前位置:  技术问答>linux和unix

不用信号如何唤醒sleep定时器

    来源: 互联网  发布时间:2017-03-30

    本文导语:  直奔主题吧:我现在主进程里面开了一个线程A,A的主要功能就是计时,当在规定的时间内睡醒后,检查主进程里面某个全局变量y有没有变化,执行相应的指令。如果在睡眠过程中,全局变量y发生了变化,则要唤醒A...

直奔主题吧:我现在主进程里面开了一个线程A,A的主要功能就是计时,当在规定的时间内睡醒后,检查主进程里面某个全局变量y有没有变化,执行相应的指令。如果在睡眠过程中,全局变量y发生了变化,则要唤醒A的计时,重新开始计时。我试过用信号,但是本进程里面有很多线程,出现了诡异的BUG。所以我想请教一下,有没有其他方法实现?

|


我代码都给出来了啊,

|
pthread_kill


     #include 
     #include 

     int
     pthread_kill(pthread_t thread, int sig);


|
cond + mutex。
你这个逻辑简单,怎么会出现诡异的BUG呢,

|

volatile int y;

int oldy = y;
pthread_mutex_lock(&mutex);
while (flag) {
printf(".n");
gettimeofday(&now, NULL);
outtime.tv_sec = now.tv_sec + 5;
outtime.tv_nsec = now.tv_usec * 1000;
int ret = 0;
while(oldy == y || ret == 0) {
ret = pthread_cond_timeout(&cond,&mutex,&outtime);
}
if(oldy != y) {
oldy = y;
//do something when y changed..
//如果这里的运行时间比较长,根据你的逻辑的具体要求,可能可以先unlock,再处理。然后再lock
} else if(oldy == y){
if(ret == ETIMEOUT) {
//do something when timeout and y is not changed.
} else {
//do something when error occurs
}
}
}
pthread_mutex_unlock(&mutex);


多线程,线程之间的运行是相互独立的。。A线程阻塞不会影响到B线程运行啊。
并且pthread_cond_timewait调用期间,mutex会被unlock, 当被B线程唤醒后,mutex会被lock。然后此函数才返回。

|

上面写错了点。

while(oldy == y || ret == 0) {

改为
while(oldy == y && ret == 0) {

|
信号不方便也不可靠, 用条件变量解决吧。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在linux下,如何获取屏幕分辨率(注:不用QT,也不用gtk/gdk)
  • 简单小代码:不用计算、不用位操作来实现 加 1
  • 如果不用jbuilder中的JDK而用自己安装的?
  • 企业不用开源产品的原因??
  • 线程同步读取变量可不可以不用互斥锁
  • 怎么使redhat8.1的刷新率改了之后不用注消或者重起啊?
  • 请问各位大虾,不用javaMail如何才能发送附件。
  • jb里面不用布局管理器可以吗?
  • STATIC变量不用赋初值?
  • ??我想不用submit提交一个网面??
  • 移动开发 iis7站长之家
  • SCOUNIX启动时如何默认登录(不用在BOOT提示符下回车)
  • 不用JDBC-ODBC连接oracle数据库?
  • 请问RS-232串行编程时为什么不用写驱动?
  • 可以不用java name.class 而是直接编译出可执行文件吗?
  • JSP连接数据库时不用DSN可以吗?还有什么方法
  • 如何使文件名为中文的文件在redhat7.2中正常显示而不用"?"号显示
  • 不用VECTOR用什么?
  • 不用定时刷新的方法,如何强行刷新网页?用命令实现。
  • 如何编程实现(不用shell命令)修改文件的时间


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,