1
我有一个函数,打印一个字符在循环中的字符。我想要做的是同步父母和子女的过程,以便每个人打印一行而不会有其他干扰。我试图用信号量来做到这一点。与系统-v信号量的父 - 子同步
这是我的代码:
int main() {
int i, sem;
struct sembuf u = {0, 1, 0};
struct sembuf d = {0 -1, 0};
sem = semget(IPC_PRIVATE, 1, 0600);
semctl(sem, 0, SETVAL, 1);
if (!fork()) {
for (i=0;i<10;i++){
semop(sem, &d, 1)) < 0)
print_char_by_char("hello\n");
semop(sem, &u, 1);
}
} else {
for (i=0;i<10;i++){
semop(sem, &d, 1);
print_char_by_char("world\n");
semop(sem, &u, 1);
}
semctl(sem, 0, IPC_RMID);
}
return 0;
}
所以这是行不通的,印刷品都是乱码,我真的不知道为什么。另外,如果我把支票semop
这样的:
if((x = semop(sem, &down, 1)) < 0)
perror("semop");
我得到semop: File too large