关于sleep函数

关于sleep函数以前很喜欢用sleep和usleep函数来做定时器。确实方便啊。但是昨天在公司用这个函数写了个东西,被说这2个函数最好别在多线程里面使用。然后叫我改一个定时器方案。查看了man文档。发现sleep还真有问题。里面就写得有BUG:BUGSsleep()maybeimplementedusing

大家好,欢迎来到IT知识分享网。关于sleep函数"

以前很喜欢用sleep和usleep函数来做定时器。确实方便啊。但是昨天在公司用这个函数写了个东西,被说这2个函数最好别在多线程里面使用。然后叫我改一个定时器方案。查看了man文档。发现sleep还真有问题。里面就写得有BUG:

 

BUGS
sleep() may be implemented using SIGALRM; mixing calls to alarm() and sleep() is a bad idea.

       Using longjmp() from a signal handler or modifying the handling of SIGALRM while sleeping will cause undefined results.

 


 

说到了用sleep在多线程的不适合。因为是用的信号驱动来实现的。可能要引起不确定的因素。后来去网上找了下其他的方法,这里把方法贴出来。一个在多线程中比较好的实现是利用的pthread库里面的pthread_cond_timewait()函数来实现。下面贴出来代码。都比较基础。

 1 void thread_sleep(int second)
 2 {
 3      /*  time wait */
 4     struct timespec outtime;
 5     pthread_cond_t cond;
 6     pthread_mutex_t mutex;
 7 
 8     /*  timer init */
 9     pthread_mutex_init(&mutex, NULL); 
10     pthread_cond_init(&cond, NULL);
11 
12     pthread_mutex_lock(&mutex);
13     outtime.tv_sec = time(NULL) + second;  
14     outtime.tv_nsec = 0;
15     pthread_cond_timedwait(&cond, &mutex, &outtime);
16     pthread_mutex_unlock(&mutex);
17 }

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/35169.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信