线程里面的休眠函数有问题

VNROOY 2012-08-27 05:57:54
情况是这样:
我在程序里面通过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,没有任何规律。
这是怎么回事?
...全文
117 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-09-02
  • 打赏
  • 举报
回复
你修改和检查共享变量不加锁?

还有,这种轮询的设计是否在你的需求里是必要的?如果你的线程仅仅是在等待一个变量的改变,请使用mutex+cond的阻塞设计。
qq120848369 2012-09-02
  • 打赏
  • 举报
回复
你修改和检查共享变量不加锁?

还有,这种轮询的设计是否在你的需求里是必要的?如果你的线程仅仅是在等待一个变量的改变,请使用mutex+cond的阻塞设计。
qq120848369 2012-09-02
  • 打赏
  • 举报
回复
你修改和检查共享变量不加锁?

还有,这种轮询的设计是否在你的需求里是必要的?如果你的线程仅仅是在等待一个变量的改变,请使用mutex+cond的阻塞设计。
zz_d 2012-09-02
  • 打赏
  • 举报
回复
同一进程的各个线程共享全局变量的.
如果其他的线程不经意地改变了countID, countID_pro的值, 就会导致上面的问题了.
也有可能是线程同步的原因了.

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧