当前位置: 技术问答>linux和unix
多线程程序中使用usleep的问题
来源: 互联网 发布时间:2015-03-31
本文导语: 一个程序中有多个线程运行,每个线程都在执行一个无穷循环, 一个循环后就调用usleep歇一会,然后继续下一个循环。 问题是:按正常情况整个程序应当是不会退出的,但程序有时候 能执行很长时间,有时候就执行...
一个程序中有多个线程运行,每个线程都在执行一个无穷循环,
一个循环后就调用usleep歇一会,然后继续下一个循环。
问题是:按正常情况整个程序应当是不会退出的,但程序有时候
能执行很长时间,有时候就执行一会儿就退出了。有一次运行了
一天一夜也还在执行。不知是什么原因?
程序退出时还特别输出“Alarm Clock”,没别的信息。
一个循环后就调用usleep歇一会,然后继续下一个循环。
问题是:按正常情况整个程序应当是不会退出的,但程序有时候
能执行很长时间,有时候就执行一会儿就退出了。有一次运行了
一天一夜也还在执行。不知是什么原因?
程序退出时还特别输出“Alarm Clock”,没别的信息。
|
多线程应该用pthread_cond_timedwait().
usleep用在多线程会出现不可知问题.
# man usleep
...
NOTES
The interaction of this function with SIGALRM and other timer functions such as
sleep(), alarm(), setitimer(), nanosleep() is unspecified. This function is obso
lete.
usleep用在多线程会出现不可知问题.
# man usleep
...
NOTES
The interaction of this function with SIGALRM and other timer functions such as
sleep(), alarm(), setitimer(), nanosleep() is unspecified. This function is obso
lete.
|
usleep:
This function is obsolete. Use nanosleep(2) or setitimer(2) instead.
This function is obsolete. Use nanosleep(2) or setitimer(2) instead.
|
usleep、sleep等都是使用alarm的信号机制实现等待,线程还是用互斥mutex
|
二楼的观点可能有点不对,在一个线程里面用sleep()后不影响其他线程,至少我现在写的这个程序是这样的。那个高手再详细解释一下,谢谢了:)
|
用select 延时可以做到。
|
usleep()是进程级,任何线程一个调用,整个进程都睡一下
|
我试验了一下,的确如zjtdut 所言,我收回我的发言
|
to zjtdut(julius):
DEC的一些系统上sleep是进程级的
DEC的一些系统上sleep是进程级的