当前位置: 技术问答>linux和unix
sleep和usleep的疑惑
来源: 互联网 发布时间:2016-11-27
本文导语: sleep的精度是秒级的,usleep的精度是微秒级的。 我创建一个线程,每隔一毫秒累加计数,在线程每隔一秒查看一下计数,按照正常推算,1秒为1000毫秒,那打印结果应该是按1000增长,但是程序运行的结果让我不理解,...
sleep的精度是秒级的,usleep的精度是微秒级的。
我创建一个线程,每隔一毫秒累加计数,在线程每隔一秒查看一下计数,按照正常推算,1秒为1000毫秒,那打印结果应该是按1000增长,但是程序运行的结果让我不理解,结果如下:
251
502
752
1002
另外,我把代码复制到其他机器上,发现结果各不相同,当然机器有好有坏。
比较好机器的结果:
951
1902
2853
另一台配置不高的机器:
51
101
152
203
254
305
代码如下:
我创建一个线程,每隔一毫秒累加计数,在线程每隔一秒查看一下计数,按照正常推算,1秒为1000毫秒,那打印结果应该是按1000增长,但是程序运行的结果让我不理解,结果如下:
251
502
752
1002
另外,我把代码复制到其他机器上,发现结果各不相同,当然机器有好有坏。
比较好机器的结果:
951
1902
2853
另一台配置不高的机器:
51
101
152
203
254
305
代码如下:
#include
#include
#include
#include
unsigned long long g_millisecond = 0;
void *timer(void)
{
sigset_t new_set;
sigemptyset(&new_set);
sigaddset(&new_set, SIGINT);
sigaddset(&new_set, SIGTERM);
sigaddset(&new_set, SIGSEGV);
pthread_sigmask(SIG_BLOCK, &new_set, NULL);
while(1){
usleep(1000);
g_millisecond++;
}
pthread_exit(0);
}
int main(int argc, char *argv[])
{
int ret;
pthread_t tid_timer;
pthread_attr_t tattr;
pthread_attr_init(&tattr);
pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
ret = pthread_create(&tid_timer, &tattr, timer, NULL);
if(ret