【发布时间】:2026-01-31 07:05:01
【问题描述】:
我在初始化信号量时遇到了麻烦,因为 sen_init 在 Xcode 中似乎不起作用。当我尝试使用 sen_init 时,调用 post/wait 时信号量值不会增加或减少。不过,在此之前,Xcode 为 sen_init 提供了一个警告,称它已被弃用。
在做了一些阅读之后,似乎我需要使用 sen_open 而不是 sen_init。我一直在旋转我的*,因为它在尝试创建它时不断抛出错误:EXEC_BAD_ADDRESS。
为什么 sem_open 不像 init 那样工作?我需要进行哪些更改才能使其正常运行?
#include <iostream>
#include <pthread.h>
#include <semaphore.h>
using namespace std;
sem_t full, empty;
pthread_attr_t attr;
pthread_t tid;
pthread_mutex_t t_mutex;
void initStates(){
full = *sem_open("full", 0, 0);
empty = *sem_open("empty", 0, 5);
sem_init(&full, 0,0);
sem_init(&empty, 0, 5);
pthread_mutex_init(&t_mutex, NULL);
pthread_attr_init(&attr);
}
int main(int argc, const char * argv[]) {
initStates();
exit(0);
}
【问题讨论】: