如果信号量值为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;
}
答案 0 :(得分:0)
来自man sem_destroy:
Destroying a semaphore that other processes or threads are currently
blocked on (in sem_wait(3)) produces undefined behavior.
看起来你的实现和我的如何处理这种未定义的行为有不同的选择。一切顺利。