使用SysV信号量时不一致

时间:2017-12-26 22:51:21

标签: c synchronization fork semaphore shared-memory

我正在尝试使用SysV信号量和共享内存API来应用我对信号量的理论知识。

简而言之,我在50个进程之间共享一个int大小的内存(由信号量保护),每个进程增加1000次,所以最终我的最终值必须为{{1但奇怪的是我的价值观如下:49962,49965,49366 ......

这是我的c代码:

1000 * 50 = 50000

1 个答案:

答案 0 :(得分:1)

我尝试执行你的代码,按预期打印50000。 尝试使用带有密钥的ftok在两个不同的共享内存之间生成非冗余密钥。

key_t key = ftok(FileName, AnyChar); // The program must have the right to access the file.

如果在执行多次执行时获得这些值,那肯定是因为你没有使用ipcrm -a。此命令将删除程序创建的所有新ipcs。