我有一个程序,它使用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);
}
}
}
问题是即使我使用了一个简单的锁定系统,计数也没有正确递增。