OS X信号灯故障
OS X Trouble with Semaphores
我在初始化信号量时遇到了问题,因为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 mode
和unsigned int value
。mode
应该类似于S_IRWXU
(请参阅chmod
文档),value
应该是给定信号量的任何起始值。
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- 分段故障背包问题
- OS X信号灯故障