【问题标题】:OS X Trouble with SemaphoresOS X 信号量问题
【发布时间】: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);
}

【问题讨论】:

    标签: c++ xcode semaphore


    【解决方案1】:

    我以前没有使用过这些调用,但我快速查看了sem_open documentation,看起来您需要将第二个参数int oflag 设置为不是0 .您可能希望将其设置为O_CREAT

    然后,您还需要两个参数,mode_t modeunsigned int valuemode 应该类似于S_IRWXU(参见chmod documentation),而value 应该是给定信号量所需的任何起始值。

    【讨论】: