Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OSX信号量故障_C++_Xcode_Semaphore - Fatal编程技术网

C++ OSX信号量故障

C++ OSX信号量故障,c++,xcode,semaphore,C++,Xcode,Semaphore,我在初始化信号量时遇到了问题,因为sen_init在Xcode中似乎不起作用。当我尝试使用sen_init时,调用post/wait时,信号量值不会增加或减少。但在此之前,Xcode为sen_init提供了一个警告,称它已被弃用 在读了一些书之后,我似乎需要使用sen_open而不是sen_init。我一直在它上面旋转我的轮子,因为它总是抛出一个错误:当试图创建它时,EXEC\u BAD\u ADDRESS 为什么sem_open的工作方式与init不同?我需要做什么更改才能使其正常工作 #in

我在初始化信号量时遇到了问题,因为sen_init在Xcode中似乎不起作用。当我尝试使用sen_init时,调用post/wait时,信号量值不会增加或减少。但在此之前,Xcode为sen_init提供了一个警告,称它已被弃用

在读了一些书之后,我似乎需要使用sen_open而不是sen_init。我一直在它上面旋转我的轮子,因为它总是抛出一个错误:当试图创建它时,EXEC\u BAD\u 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);
}

我以前没有使用过这些调用,但是我快速查看了,看起来需要将第二个参数int of lag设置为非0的值。您可能需要将其设置为O_CREAT

然后,您还需要两个参数,mode\u t mode和unsigned int value。模式应该类似于S_IRWXU,并且值应该是给定信号量的任何起始值