我在初始化信号量方面遇到了麻烦,因为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);
}
答案 0 :(得分:0)
之前我没有使用过这些调用,但是我快速查看了sem_open
documentation,看起来您需要将第二个参数int oflag
设置为不是' t 0
。您可能希望将其设置为O_CREAT
。
然后,您还需要另外两个参数mode_t mode
和unsigned int value
。 mode
应该类似于S_IRWXU
(请参阅chmod
documentation),而value
应该是您对给定信号量所需的任何起始值。