sem_wait不能在基本代码中工作

用gcc编译。 我跑了这个,看看为什么我在其他程序中使用的信号量不能正常工作。 我只是错误地使用这些或者什么? 即使信号量应该停止执行并导致死锁,每次输出字符串,对吧?

这是代码:

#include  #include  #include  #define NUM_THREADS 5 void printHello(); int main(){ int i; pthread_t threads[NUM_THREADS]; sem_t sem1; sem_init(&sem1, 0, 0); sem_wait(&sem1); for(i = 0; i < NUM_THREADS; i++){ pthread_create(&threads[i], NULL, &printHello, NULL); } sem_destroy(&sem1); pthread_exit(NULL); return 0; } void printHello(){ printf("sem_wait failed\n"); } 

当我试图掌握整个multithreading概念时,任何帮助都会受到高度赞赏。

谢谢!

该代码看起来很好。 好吧,它会在你将start函数更改为void *printHello(void *)pthread_join因此你不会破坏信号量并退出。 但是信号量完全阻止了linux上的信号量。

你在OSX上运行吗? 显然,OSX不支持未命名的POSIX信号量。 如果是这种情况,您需要使用命名的POSIX信号量,即sem_open而不是sem_init