大家好,欢迎来到IT知识分享网。
以前很喜欢用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