Linux如何实现进程间同步

2023-04-12 08:29:00 进程 同步 如何实现

Linux如何实现进程间同步

Linux使用信号量来实现进程间同步。信号量是一个计数器,用于跟踪进程之间的同步。当某个进程执行操作时,如果它需要等待其他进程完成相同操作,则它可以使用信号量。此外,当某个进程完成其操作时,它可以增加信号量的值,以便其他进程可以继续执行。

下面是一个使用信号量实现进程间同步的例子:

#include #include #include #include #include #include #include

int main() { int semid, i, pid, status; struct sembuf sb; semid = semget(IPC_PRIVATE, 1, IPC_CREAT | 0666); if (semid < 0) { perror("semget"); exit(1); } sb.sem_num = 0; sb.sem_op = 1; sb.sem_flg = 0; if (semop(semid, &sb, 1) < 0) { perror("semop"); exit(1); } for (i=0; i<10; i++) { pid = fork(); if (pid < 0) { perror("fork"); exit(1); } else if (pid == 0) { printf("Child %d: before semop

", getpid()); sb.sem_op = -1; if (semop(semid, &sb, 1) < 0) { perror("semop"); exit(1); } printf("Child %d: after semop

", getpid()); exit(0); } } printf("Parent: before semop

"); sb.sem_op = -10; if (semop(semid, &sb, 1) < 0) { perror("semop"); exit(1); } printf("Parent: after semop

"); for (i=0; i<10; i++) { wait(&status); } if (semctl(semid, 0, IPC_RMID, 0) < 0) { perror("semctl"); exit(1); } return 0; }

上面的代码中定义了一个信号量,然后创建了10个子进程。每个子进程都会执行一个操作,然后等待信号量被增加。当所有子进程都执行完操作时,信号量的值为10,此时父进程才会继续执行。

这样,就可以使用信号量来实现进程间同步。

相关文章