设计两个交互程序,程序1从终端1运行,程序2从终端2运行。两个程序参考同一个信号量,程序1执行P操作,然后需等待程序2执行相应的V操作,程序1再继续。程序2执行V操作前需接收用户输入,输入为“OK”则执行相应的V操作。

动态 未结 0 63
小小草
小小草 LV1 2023年9月23日 23:40 发表
程序1: ```c #include #include #include #include #define SEM_KEY 1234 union semun { int val; struct semid_ds *buf; unsigned short *array; }; int main() { int sem_id = semget(SEM_KEY, 1, IPC_CREAT | 0666); if (sem_id == -1) { perror("semget error"); exit(1); } union semun arg; arg.val = 0; if (semctl(sem_id, 0, SETVAL, arg) == -1) { perror("semctl error"); exit(1); } struct sembuf sem_op; sem_op.sem_num = 0; sem_op.sem_flg = 0; printf("Program 1 is running...\n"); sem_op.sem_op = -1; if (semop(sem_id, &sem_op, 1) == -1) { perror("semop error"); exit(1); } printf("Program 1 is waiting for Program 2...\n"); sem_op.sem_op = 1; if (semop(sem_id, &sem_op, 1) == -1) { perror("semop error"); exit(1); } printf("Program 1 continues.\n"); return 0; } ``` 程序2: ```c #include #include #include #include #include #define SEM_KEY 1234 union semun { int val; struct semid_ds *buf; unsigned short *array; }; int main() { int sem_id = semget(SEM_KEY, 1, IPC_CREAT | 0666); if (sem_id == -1) { perror("semget error"); exit(1); } union semun arg; arg.val = 0; if (semctl(sem_id, 0, SETVAL, arg) == -1) { perror("semctl error"); exit(1); } struct sembuf sem_op; sem_op.sem_num = 0; sem_op.sem_flg = 0; printf("Program
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复