OS X麻烦信号量

时间:2015-03-26 21:37:01

标签: c++ xcode semaphore

我在初始化信号量方面遇到了麻烦,因为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);
}

1 个答案:

答案 0 :(得分:0)

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

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