我尝试使用以下逻辑(一种伪代码)实现pthread
:
pthread_mutex_t mutex;
threadA()
{
lock(mutex);
// do work
timed_lock(mutex, current_abs_time + 1 minute);
}
threadB()
{
// do work in more than 1 minute
unlock(mutex);
}
我确实希望threadA
做这项工作并等到threadB
信号但不超过 1 分钟。我在 Win32 中做了很多类似的事情,但坚持使用 pthreads:一个timed_lock
部分立即(不是 1 分钟)返回代码ETIMEDOUT
。
有没有简单的方法来实现上面的逻辑?
即使下面的代码ETIMEDOUT
立即返回
pthread_mutex_t m;
// Thread A
pthread_mutex_init(&m, 0);
pthread_mutex_lock(&m);
// Thread B
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
struct timespec time = {now.tv_sec + 5, now.tv_nsec};
pthread_mutex_timedlock(&m, &time); // immediately return ETIMEDOUT
有谁知道为什么?我也尝试过gettimeofday
功能
谢谢