gpt4 book ai didi

c - sem_wait 在基本代码中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:29 26 4
gpt4 key购买 nike

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

任何帮助将不胜感激,因为我正在努力掌握整个多线程概念。

谢谢!

最佳答案

该代码看起来不错。好吧,它会在您将启动函数更改为 void *printHello(void *)pthread_join 之后执行,这样您就不会破坏信号量并退出。但是信号量 block 与它在 Linux 上应该完全一样。

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

关于c - sem_wait 在基本代码中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20850750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com