C中的计时器线程

我正在Ubuntu上用C进行编码。 我需要在C中编写一个计时器线程。我有这个线程

void * thread(void)
{
    sleep(TIMEOUT);
    pthread_mutex_lock(&mutex);
    //operations
    pthead_mutex_unlock(&mutex);

}

我需要另一个名为timerManager的线程可以重置计时器。我的第一个想法是杀死该线程并创建另一个线程,但这是一个问题,因为如果我在等待互斥锁时使用pthread_cancel杀死此计时器线程,则会创建死锁,因为互斥锁处于锁定状态。

我该怎么办? 谢谢大家。

iCMS 回答:C中的计时器线程

pthread_mutex_t watchdog_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t  watchdog_cond  = PTHREAD_COND_INITIALIZER;
int reset_watchdog = 0;

void reset_watchdog(void) {
   pthread_mutex_lock(&watchdog_mutex);
   reset_watchdog = 1;
   pthread_cond_signal(&watchdog_cond);
   pthead_mutex_unlock(&watchdog_mutex);
}

void watchdog(void) {
   struct timespec sleep_until = { 0 };
   sleep_until.tv_sec = time(NULL) + TIMEOUT;

   pthread_mutex_lock(&watchdog_mutex);

   // Loop until a time out.
   while (!pthread_cond_timedwait(&watchdog_cond,&watchdog_mutex,&sleep_until)) {
      if (reset_watchdog) {
         sleep_until.tv_sec = time() + TIMEOUT;
         reset_watchdog = 0;
      }
   }

   pthead_mutex_unlock(&watchdog_mutex);

   // ...
}
本文链接:https://www.f2er.com/1817725.html

大家都在问