将C中的多个进程与共享内存同步

时间:2015-04-01 13:58:55

标签: c++ c multithreading locking shared-memory

我有一个程序,它使用fork()在for循环中创建子进程。孩子也会创建其他过程。

所有进程都必须递增计数,并且必须在结尾显示计数。

为此,我使用了一个简单的锁定系统。共享内存大小为2。 有一个sig_tomic_t类型的2变量:count和一个锁。

当进程想要递增计数时,它将锁定设置为1,递增计数,然后将锁定设置为0.否则,如果锁定为1,则进程将休眠。

以下是感兴趣的代码段。

for(i = 1; i <= 10; i++) {

    if((pid = fork()) < 0) {
        perror("Error fork!");
        exit(2);
    }

    if(*lock == 0) {
        *lock = 1;
        *count = *count  + 1;
        *lock = 0;
    }
    else {
        while(*lock == 1) {
            sleep(1);
        }
    }
 }

问题是即使我使用了一个简单的锁定系统,计数也没有正确递增。

0 个答案:

没有答案