sem_wait不能在基本代码中工作

时间:2013-12-31 02:18:46

标签: c macos posix semaphore

用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");
}

当我试图掌握整个多线程概念时,我们将非常感激任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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