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