Ожидание семафоров в pthread API - PullRequest
0 голосов
/ 04 сентября 2011

Если значение семафора равно 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 голосов
/ 04 сентября 2011

От человека sem_destroy:

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

Похоже, ваша реализация и моя по-разному выбирают способ обработки этого неопределенного поведения. Все идет, хотя.

...