当前位置: 技术问答>linux和unix
在线程里面使用sleep函数是否会引起整个的进程都睡眠
来源: 互联网 发布时间:2016-03-23
本文导语: 看到有些文章里面写到:sleep函数是和进程相关的,所以当在线程里面使用sleep函数会引起整个的进程和其他的线程睡眠。但是我写了一个测试程序,在fedora5和fedora9下面运行好像sleep函数都只是影响自己线程的运行情...
看到有些文章里面写到:sleep函数是和进程相关的,所以当在线程里面使用sleep函数会引起整个的进程和其他的线程睡眠。但是我写了一个测试程序,在fedora5和fedora9下面运行好像sleep函数都只是影响自己线程的运行情况,而不会影响到主进程和其他进程的运行。
如果按上面说的那样,那应该是在printmsg函数sleep 4 秒的时候ms test停止输出。
但是结果是:
每隔1秒输出ms test
每隔4秒输出test
sleep函数到底会不会让主进程和其他线程的也sleep的呢?
#include
#include
#include
void printmsg()
{
while(1){
printf("testn");
sleep(4);
}
}
void printms()
{
while(1){
printf("ms testn");
sleep(1);
}
}
int main()
{
pthread_t tid0;
pthread_t tid1;
pthread_create(&tid0, NULL, (void *)printmsg, NULL);
pthread_create(&tid1, NULL, (void *)printms, NULL);
pthread_join(tid0, NULL);
pthread_join(tid1, NULL);
return 0;
}
如果按上面说的那样,那应该是在printmsg函数sleep 4 秒的时候ms test停止输出。
但是结果是:
每隔1秒输出ms test
每隔4秒输出test
sleep函数到底会不会让主进程和其他线程的也sleep的呢?
|
这是老POSIX。现在是这样的:
The sleep() function shall cause the calling thread to be suspended from execution until either the number of realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and its action is to invoke a signal-catching function or to terminate the process. The suspension time may be longer than requested due to the scheduling of other activity by the system.