OS X信号灯故障

OS X Trouble with Semaphores

本文关键字:故障 信号灯 OS      更新时间:2023-10-16

我在初始化信号量时遇到了问题,因为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);
}

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

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