c++ - 当线程/进程处于 sleep 状态时, sleep 线程或进程的指令是否继续执行?

标签 c++ c

当我在 IPC(进程间通信)上做作业时,一个在两个进程之间使用共享内存的聊天应用程序, sleep 线程如何检查 while 循环中的条件(如果 *shm != 1 线程打印字符串唤醒)这怎么可能?

#define TRUE 1

while(*shm == 1)
    sleep(1)
printf("wakeup");

最佳答案

sleep 不检查 shm 值。

现在你的线程调用sleep,它会暂停线程几毫秒,然后它会被来自操作系统定时器/调度器的信号唤醒。这就是 sleep 所做的全部。然后线程唤醒并恢复您的代码:sleep() 返回,循环开始下一次迭代,检查 shm 并决定是再次休眠还是继续。

它可以工作,但如果您使用专门的同步原语(如 c++11/posix 中的条件变量),它会消耗更多。在等待条件变量信号时休眠将真正休眠直到接收到信号,而不会为这种周期性唤醒浪费 cpu 周期。

关于c++ - 当线程/进程处于 sleep 状态时, sleep 线程或进程的指令是否继续执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50186590/

相关文章:

c - 如何从 C 调用 MATLAB 代码?

c - 哪些系统使用非统一指针表示?

c++ - 如何使用初始化列表循环来修改元素?

c - 如何将数字更改为 C 中的变量?

c - 用 C 语言创建 shell 很困难

c++ - 每次调试此代码时,我都会收到 "subscript out of range error"。有人可以帮我查明错误或错误吗?

C语言-if语句问题

c++ - 初始化动态数组

c++ - 如何查看由 gcc(任何风格)编译器为 C/C++ 程序生成的汇编代码?

c++ - 初始化类模板的static constexpr成员变量