将Zero作为共享内存变量的值取出

时间:2018-04-23 10:06:22

标签: c memory-management fork ipc shared-memory

我有一个父程序,它将分叉以下子程序并递增,显示,减少并显示变量'test'(最初为0)15次。我尝试运行它很多次,看看每几行之后我得到了什么输出,但是我无法知道我的'test'变量只显示零,15次。

pybind11_add_module

1 个答案:

答案 0 :(得分:1)

我可以看到几件事。

  1. 无论代码如何构建,我都会检查shmget和shmat中是否存在错误: 我改变了

    shmID = shmget(key,SHARED_MEM,0666) shmID2 = shmget(key2,SHARED_MEM,0666);

  2. 通过

    if ( (shmID = shmget(key, SHARED_MEM, 0666)) < 0)  
    {
        perror("shmget"); 
        exit(1); 
    }  
    if ( (shmID2 = shmget(key2, SHARED_MEM, 0666) < 0)  
    {
        perror("shmat");
        exit(1); 
    }
    
    1. 请注意,您使用0666权限创建SHM但没有IPC_CREAT | IPC_EXCL。 我建议您使用IPC_CREAT | IPC_EXCL | 0666标记首次创建。
      1. 与第一点相同,我也会检查shmat的问题:
      2. 请参阅test的示例。 counter应该是相同的。

        if ((test = (int *) shmat(shmID, 0, 0)) == -1) 
        {
           perror("shmat");
           exit(1);
        }
        

        你可以在cli中检查shm是否有问题,例如,已经创建,使用命令ipcs检查或ipcrm shm删除并重新初始化:

        ipcs shm | grep [your_shm_key or shmid]