线程里面的休眠函数有问题
情况是这样:
我在程序里面通过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,没有任何规律。
这是怎么回事?
我在程序里面通过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,没有任何规律。
这是怎么回事?
...全文
相关推荐
详解C++11 线程休眠函数
在C++11标准之前,程序员通常依赖于操作系统提供的函数,如`sleep`和`usleep`,来实现线程的休眠,但这可能导致跨平台兼容性问题,因为不同操作系统中这些函数的行为可能不一致。
pintos 线程休眠实现
睡眠队列是一种数据结构,它用于存储处于休眠状态的线程。当一个线程调用休眠函数时,它会被从当前的就绪队列移出,并被插入到与等待事件相关的睡眠队列中。
C++线程休眠函数解析[项目源码]
值得注意的是,std::this_thread::sleep_for并非唯一的线程休眠函数。
系统定时休眠VC源代码
同时,为了确保用户交互的响应性,需要正确处理线程同步问题,防止在休眠过程中阻塞其他线程。在实际应用中,还需要考虑到错误处理和权限验证。
C#多远程源码
本文通过代码示例深入探讨了多线程编程中的同步问题和线程执行顺序。详细分析了使用Mutex实现线程互斥访问的方法,以及线程启动、回调函数中互斥锁释放和休眠顺序对程序行为的影响。同时,讲解了主线程如何正确


