用gcc编译。我跑了这个,看看为什么我在其他程序中使用的信号量不能正常工作。我只是错误地使用它们或者是什么?每次输出字符串,即使信号量应该停止执行并导致死锁,对吧?
以下是代码:
#include <pthread.h>
#include <semaphore.h>
#include <stdlib.h>
#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");
}
当我试图掌握整个多线程概念时,我们将非常感激任何帮助。
谢谢!
答案 0 :(得分:1)
该代码看起来很好。好吧,它会在你将开始函数更改为void *printHello(void *)
和pthread_join
之后,因此你不会破坏信号量并退出。但是信号量完全阻止了linux上的信号。
你在OSX上运行吗?显然,OSX不支持未命名的POSIX信号量。如果是这种情况,您需要使用命名的POSIX信号量,即sem_open
而不是sem_init
。