当线程/进程睡眠时,睡眠线程或进程的指令是否继续执行?

时间:2018-05-05 06:47:33

标签: c++ c

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

#define TRUE 1

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

2 个答案:

答案 0 :(得分:3)

sleep未检查shm值。

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

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

答案 1 :(得分:1)

unsigned int sleep(unsigned int seconds);
  

暂停线程执行指定的秒数。因为   处理器延迟,线程可以睡得比这稍长   指定时间。在此期间收到的未阻塞信号(for   其中的动作是调用信号处理函数或结束   线程)过早地“唤醒”线程。当该函数返回时,   即使剩余睡眠时间,sleep()也会立即返回。

所以你的while(*shm == 1)在线程休眠时不会计算。