【探索Linux】 P.22(POSIX信号量)
在Linux中,POSIX信号量是一种进程间同步的机制。它允许进程间按预定的规则传递信息。
以下是一个使用POSIX信号量的简单例子,它创建了一个信号量,初始化为1,然后两个进程交替打印信息。
首先,创建一个名为sem.c
的C文件,包含以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <unistd.h>
sem_t bin_sem;
void sem_init_to_1() {
if (sem_init(&bin_sem, 0, 1) < 0) {
perror("sem_init");
exit(EXIT_FAILURE);
}
}
void sem_wait_or_die() {
if (sem_wait(&bin_sem) < 0) {
perror("sem_wait");
exit(EXIT_FAILURE);
}
}
void sem_post_or_die() {
if (sem_post(&bin_sem) < 0) {
perror("sem_post");
exit(EXIT_FAILURE);
}
}
void child_process() {
while(1) {
sem_wait_or_die();
printf("Child process: Hello!\n");
fflush(stdout);
sleep(1);
sem_post_or_die();
sleep(1);
}
}
int main() {
sem_init_to_1();
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid == 0) {
child_process();
} else {
while(1) {
sem_wait_or_die();
printf("Parent process: Hi!\n");
fflush(stdout);
sleep(1);
sem_post_or_die();
sleep(1);
}
wait(NULL);
}
return 0;
}
这段代码首先定义了一个初始化为1的二进制信号量。然后,在父进程和子进程中,它使用sem_wait
来等待信号量,在打印信息后使用sem_post
来释放信号量。这样,两个进程交替打印信息。
要编译这个程序,你可以使用以下命令:
gcc -o sem sem.c -lpthread
运行程序后,你会看到父子进程交替打印信息。
./sem
这个例子展示了如何使用POSIX信号量来同步两个进程的行为。这种同步机制对于构建需要多进程协作的程序非常有用。
评论已关闭