Eu tenho andado a experimentar programação concorrente em C. Fiz forks de processos e criação de threads com trincos (mutex) no Mac (Darwin), mas os semáforos com contador estavam a dar resultados inesperados. Aparentemente o sem_wait() não surtia efeito.
Acabei então por descobrir que o Mac não implementa semáforos baseados em memória (sem_init() e sem_destroy()), apenas semáforos com nome (sem_open() e sem_close()). Também reparei que a função sem_getvalue() não está implementada (é opcional em POSIX).

