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

线程里面的休眠函数有问题
情况是这样:
  我在程序里面通过if(pthread_create(&ntid,NULL,do_time,NULL)!=0)
  { printf("can't creat new pthread\n");
  exit(1);  
  }
  创建了一个线程,线程函数如下:这个函数的作用是这样的:每隔20秒检查一下countID的值,如果值没有发生变化,则输出goose delay。
void *do_time()
  {  
  while(1)
  {  
  sleep(20);
  if(countID==1)//第一次计数,不进行比较,只将countID赋给countID_pro,
  {
  countID_pro=countID;
  printf("goose delay\n");
  }
   
   
  else
  {
  if(countID==countID_pro) //在第二次计数之后 进行比较
  {
  printf("goose delay\n");
  countID_pro=countID;
  }
  }  
   
  }  

但是现在的情况是,如果在第二次技术之后没有再进行计数的话,程序会每隔不定的时间进行打印 goose delay,没有任何规律。
 这是怎么回事?

------解决方案--------------------
同一进程的各个线程共享全局变量的.
如果其他的线程不经意地改变了countID, countID_pro的值, 就会导致上面的问题了.
也有可能是线程同步的原因了.
------解决方案--------------------
你修改和检查共享变量不加锁?

还有,这种轮询的设计是否在你的需求里是必要的?如果你的线程仅仅是在等待一个变量的改变,请使用mutex+cond的阻塞设计。
------解决方案--------------------
你修改和检查共享变量不加锁?

还有,这种轮询的设计是否在你的需求里是必要的?如果你的线程仅仅是在等待一个变量的改变,请使用mutex+cond的阻塞设计。
------解决方案--------------------
你修改和检查共享变量不加锁?

还有,这种轮询的设计是否在你的需求里是必要的?如果你的线程仅仅是在等待一个变量的改变,请使用mutex+cond的阻塞设计。