线程里面的休眠函数有问题
情况是这样:
我在程序里面通过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的阻塞设计。