当前位置: 技术问答>linux和unix
线程里面的休眠函数有问题
来源: 互联网 发布时间:2017-03-12
本文导语: 情况是这样: 我在程序里面通过if(pthread_create(&ntid,NULL,do_time,NULL)!=0) { printf("can't creat new pthreadn"); exit(1); ...
情况是这样:
我在程序里面通过if(pthread_create(&ntid,NULL,do_time,NULL)!=0)
{ printf("can't creat new pthreadn");
exit(1);
}
创建了一个线程,线程函数如下:这个函数的作用是这样的:每隔20秒检查一下countID的值,如果值没有发生变化,则输出goose delay。
void *do_time()
{
while(1)
{
sleep(20);
if(countID==1)//第一次计数,不进行比较,只将countID赋给countID_pro,
{
countID_pro=countID;
printf("goose delayn");
}
else
{
if(countID==countID_pro) //在第二次计数之后 进行比较
{
printf("goose delayn");
countID_pro=countID;
}
}
}
但是现在的情况是,如果在第二次技术之后没有再进行计数的话,程序会每隔不定的时间进行打印 goose delay,没有任何规律。
这是怎么回事?
我在程序里面通过if(pthread_create(&ntid,NULL,do_time,NULL)!=0)
{ printf("can't creat new pthreadn");
exit(1);
}
创建了一个线程,线程函数如下:这个函数的作用是这样的:每隔20秒检查一下countID的值,如果值没有发生变化,则输出goose delay。
void *do_time()
{
while(1)
{
sleep(20);
if(countID==1)//第一次计数,不进行比较,只将countID赋给countID_pro,
{
countID_pro=countID;
printf("goose delayn");
}
else
{
if(countID==countID_pro) //在第二次计数之后 进行比较
{
printf("goose delayn");
countID_pro=countID;
}
}
}
但是现在的情况是,如果在第二次技术之后没有再进行计数的话,程序会每隔不定的时间进行打印 goose delay,没有任何规律。
这是怎么回事?
|
if(countID==countID_pro) //在第二次计数之后 进行比较
{
printf("goose delayn");
countID_pro=countID;
}
else {printf("%d %dn", countID, countID_pro);} //加一些打印值的语句,看看值为多少,
//条件语句是怎么走的
{
printf("goose delayn");
countID_pro=countID;
}
else {printf("%d %dn", countID, countID_pro);} //加一些打印值的语句,看看值为多少,
//条件语句是怎么走的
|
没弄明白你这写程序本来的意图 是不是还有另外一个线程在更新countID的值?