使用<代码>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).
"
<< "This seems to be a bug in shmget()?" << std::endl;
exit(1);
}
我完全失去了可以做些什么。 我在几个系统上尝试了这一问题(HCB kernels 2.6.32和3.3.5),但两者都表现出同样的行为。 目前,当我获得这种失败模式时,我只是重复这一进程,而且通常工作。 但是,这似乎是一种判决,我不知道这在<条码>中是否是一种泡沫?
任何想法?