通过信号量访问共享内存
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_op
是 less than zero
,进程必须对
semaphore set
。所以如果 sem_access.sem_op = -1
;当其他进程将此值设置为 0 或大于 0 时,则只有此进程才能访问共享资源。
进程 1:
sem_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 为零,则
操作可以立即进行。”
我希望你有解决问题的想法。
我有不同数量的进程应该写在我已经定义的共享内存上。我正在尝试使用系统 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_op
是 less than zero
,进程必须对
semaphore set
。所以如果 sem_access.sem_op = -1
;当其他进程将此值设置为 0 或大于 0 时,则只有此进程才能访问共享资源。
进程 1:
sem_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 为零,则
操作可以立即进行。”
我希望你有解决问题的想法。