我正在尝试为POSIX标准重构我的C代码。显然我陷入了僵局,归结为这个简单的代码。信号量应该在两个进程之间共享,但是不幸的是,它由创建它的进程所拥有。
创建者
sem_t * mutex;
if ((mutex = sem_open (key_trucker, O_CREAT, 0644, 1)) == SEM_FAILED) {
perror ("sem_open"); exit (1);
}
int val;
sem_getvalue(mutex,&val);
if(val == 0 ){
sem_post(mutex);
}
time_t currtime;
while(1){
sem_wait(mutex);
time(&currtime);
sleep(1);
printf("%s",ctime(&currtime) );
sem_post(mutex);
}
共享信号量的过程
sem_t * mutex;
if ((mutex = sem_open (key_trucker, 0 )) == SEM_FAILED) {
perror ("sem_open"); exit (1);
}
time_t currtime;
while(1){
sem_wait(mutex);
time(&currtime);
printf("%s",ctime(&currtime) );
sleep(1);
sem_post(mutex);
}
答案 0 :(得分:0)
要在进程之间共享的信号量必须是“命名”信号量。这样的名称以“ \”开头。信号量最终也需要销毁,否则,第二次进程调用sem_open()
时它将失败,并将'errno'设置为EXIST
(或类似名称),因此代码也需要(在注意到呼叫失败)以检查errno