を使用して、次のロジック (一種の疑似コード) を実装しようとしています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
一部は code ですぐに(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
関数で試しました
ありがとう