【发布时间】:2017-01-24 16:51:09
【问题描述】:
我有一个函数可以在循环中逐个字符地打印一些东西。我想要做的是同步父进程和子进程,以便每个进程都打印一行,而不会受到其他进程的干扰。我正在尝试使用信号量来做到这一点。
这是我的代码:
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
【问题讨论】: