通过信号量访问共享内存

Get access to shared memory through semaphores

我有不同数量的进程应该写在我已经定义的共享内存上。我正在尝试使用系统 V 信号量。信号量 (sem_access) 初始化为 1。

    sem_access.sem_op = -1;
    semop(sem_access_id, &sem_access, 1);

    info->index++;
    printf ("INDEX= %d\n", info->index);

    sem_access.sem_op = 1;
    semop(sem_access_id, &sem_access, 1);

问题是 printf 总是打印相同的数字,而不增加索引。 PS:抱歉我的英语不好,但我是西班牙人。 编辑:如果我插入 sleep(1) 效果很好,但我真的不想睡觉!

提供更多关于您的代码的信息。你有什么问题?一旦获得资源或不等待,您的流程是否会卡住?

semop() 的手册页说:

1) 如果 sem_opless than zero,进程必须对 semaphore set。所以如果 sem_access.sem_op = -1;当其他进程将此值设置为 0 或大于 0 时,则只有此进程才能访问共享资源。

进程 1sem_access.sem_op = -1; //这个过程会一直等到条件不成立

进程2:因为在第一个进程中sem_op值为-1,这个进程需要使sem_op值为0或1然后只有其他进程将被执行,所以这样做

sem_access.sem_op = 1;

如 semop() 的手册页所述,如果 sem_op 是正整数,则该操作将 this 值添加到 信号量值 (semval)。现在 sem_op 变为 -1 + 1 = 0,再次参考 semop() 手册页 "This is a "wait-for-zero”操作:如果 semval 为零,则 操作可以立即进行。”

我希望你有解决问题的想法。