在pthread API中等待信号量

时间:2011-09-04 16:51:04

标签: pthreads semaphore

如果信号量值为0并且您在等待它,我一直认为线程阻塞。 为什么没有以下代码阻止。

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>

sem_t sA;

void* funcA(void* param) {
  sem_wait(&sA);
  printf("Thread A\n");
  pthread_exit(0);
}

int main() {
  sem_init(&sA, 0, 0);
  pthread_t tA;
  pthread_create(&tA, NULL, funcA, NULL);
  pthread_exit(0);
  sem_destroy(&sA);
  return 0;
}

1 个答案:

答案 0 :(得分:0)

来自man sem_destroy:

   Destroying  a  semaphore  that other processes or threads are currently
   blocked on (in sem_wait(3)) produces undefined behavior.

看起来你的实现和我的如何处理这种未定义的行为有不同的选择。一切顺利。