如何阻止CPU上的线程然后唤醒它?

时间:2015-05-13 06:53:14

标签: operating-system synchronization cpu-usage thread-synchronization

如何阻止CPU上的线程(因此它不会占用CPU时间),然后在时间t之后将其唤醒,而不使用信号机制。

1 个答案:

答案 0 :(得分:0)

没有跨平台的方法可以做到这一点,但有几个选项:

由于您是在Linux上执行此操作,因此最佳选择是pthread库,例如pthread_mutex_timedlock

示例:

#include <pthread.h>
#include <time.h>

pthread_mutex_t mutex;
struct timespec timeout;

timeout.tv_sec = 2; // Two seconds
timeout.nv_nsec = 0; // Zero nanoseconds
pthread_mutex_init(&mutex, NULL); // Initialize mutex object
pthread_mutex_timedlock(&mutex, &timeout); // Wait for two seconds.

建议您检查函数的返回值是否存在可能发生的错误。

如果您真的不想使用任何操作系统库,则无法让线程进入休眠状态,但您可以使用特殊说明,例如pauserep; nop;同时旋转以降低功耗。

例如:

while (time(NULL) < timeToWake) asm("pause");