gpt4 book ai didi

linux - 在线程中调用 sleep(3)、usleep(3) 或 nanosleep(2) 是否安全?

转载 作者:太空狗 更新时间:2023-10-29 11:22:18 24 4
gpt4 key购买 nike

我听说一些unix实现使用alarm(2)来实现sleep功能。如果它是真的,我猜下面的代码可能不安全,因为 SIGALRM 可能会被发送到进程,它被根线程接收。

#include <pthread.h>
#include <unistd.h>

void *doit(void *arg) {
sleep(1);
return NULL;
}

int main(int argc, char *argv[]) {
pthread_t th;

pthread_create(&th, NULL, doit, NULL);
sleep(5);
pthread_join(th, NULL);
return 0;
}

在线程中调用sleep(3)usleep(3)nanosleep(2) 是否安全?

最佳答案

我不知道你在线程中使用 sleep() 的目的是什么,但我从不推荐其他人这样做。如果你想测量某个时间,你可以使用应用程序定时器。例如,如果你想控制所有线程的运行顺序,你可以使用pthread_cond。 Linux 还提供了许多方法来让您同步线程。

快速浏览一下“man 3 sleep”,它给出了以下答案。“漏洞 sleep() 可以使用 SIGALRM 实现;混合调用 alarm(2) 和 sleep() 是个坏主意。 从信号处理程序使用 longjmp(3) 或在休眠时修改 SIGALRM 的处理将导致未定义的结果。

与 sleep(3) 和 usleep(3) 相比,nanosleep() 具有以下优点:它提供了更高的分辨率来指定 sleep 间隔; POSIX.1 明确规定它不与信号交互;它使恢复 sleep 的任务 更容易被信号处理程序中断。 "

关于linux - 在线程中调用 sleep(3)、usleep(3) 或 nanosleep(2) 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22162521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com