我shmget()
用来分配一个共享内存段,然后我用它pthread_mutex_init()
来创建进程之间共享的互斥锁。通常,这可以按预期工作。不过,偶尔shmget()
还会回来ENOENT
。阅读手册页,这应该只发生在shmflg
不包含的情况IPC_CREAT
下,但我包括在内。这是我的代码的一个片段:
shmid_ = shmget( MYLOCK_KEY_ID, sizeof(pthread_mutex_t), IPC_CREAT | IPC_EXCL | 0666 );
if ( errno == ENOENT ) {
// This should never occur since IPC_CREAT was specified
std::cerr
<< "shmget() returned ENOENT (it thinks IPC_CREAT wasn't specified).\n"
<< "This seems to be a bug in shmget()?" << std::endl;
exit(1);
}
我完全不知道会发生什么。我已经在几个系统(Linux 内核 2.6.32 和 3.3.5)上尝试过这个,但都表现出相同的行为。目前,当我获得这种故障模式时,我只是重复这个过程,它通常可以工作。但这似乎有点笨拙,我不知道这是一个错误shmget()
还是我只是做错了什么。
有任何想法吗?