程序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