如何停止并继续pthread?

Dam*_*ian 9 c multithreading pthreads

我用C编码(实际上是在OOC中,然后编译为C).

如何指示线程在特定检查点等待,直到某个其他线程告诉它继续?

我实际上在线程中使用了一个紧密循环并轮询我正在从主线程中更改的变量,但我认为这不是很好的表现,对吧?除此之外,当我在一个线程中进行紧密循环时,我是否应该在循环中包含一个睡眠以避免消耗大量的CPU功率而只是循环?

Arn*_*anc 12

看来你正在寻找pthread_cond_wait及其相关功能.

以下是联机帮助页面中的引用,其中包含一个示例:

考虑由互斥量mut保护的两个共享变量x和y,以及每当x变大于y时要发信号通知的条件变量cond.

          int x,y;
          pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
          pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
Run Code Online (Sandbox Code Playgroud)

等待直到x大于y的执行如下:

          pthread_mutex_lock(&mut);
          while (x <= y) {
                  pthread_cond_wait(&cond, &mut);
          }
          /* operate on x and y */
          pthread_mutex_unlock(&mut);
Run Code Online (Sandbox Code Playgroud)

对x和y的修改可能导致x变得大于y,如果需要,应该表明条件:

          pthread_mutex_lock(&mut);
          /* modify x and y */
          if (x > y) pthread_cond_broadcast(&cond);
          pthread_mutex_unlock(&mut);
Run Code Online (Sandbox Code Playgroud)

最后它会满足您的要求:线程调用pthread_cond_wait(&cond)被阻塞,直到另一个线程(例如您的主线程)调用pthread_cond_broadcast(&cond).在此期间,它处于一种blocked状态,不消耗CPU周期.