gpt4 book ai didi

c - 如何使进程交替?

转载 作者:行者123 更新时间:2023-12-04 10:13:51 26 4
gpt4 key购买 nike

至于线程,我有互斥量和条件,所以我可以轻松地操纵它们。
但是,如果我通过 fork() 创建两个进程,我该如何让它们交替进行?
或者,有没有办法为进程创建一个“关键部分”?

我打算制作一个交替打印“r”和“w”的程序,这是代码。

#include <stdio.h>
#include <stdlib.h>

int pipe_1[2];
int flag = 0;

void r();
void w();

int main() {
pipe(pipe_1);

if(fork())
r();
else
w();
}

void r() {
int count = 0;
while(1) {
printf("%d \n", flag);
if (count == 10)
exit(0);
if(flag == 0) {
puts("r");
flag = 1;
count++;
while(flag == 1)
;
}
}
}

void w() {
while(1) {
if(flag == 1) {
puts("w");
flag = 0;
while(flag == 0)
;
}
}
}

输出只有:

0
r

然后好像进入了死循环。
有什么问题吗?
进行交替过程的正确方法是什么?

谢谢。

最佳答案

这可能让人不知所措,但是您可以使用大量原语。请参阅此处以获取列表。

http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html

扫一眼列表,几乎所有这些都可以使用。有些更像是传统的 pthread 同步原语,有些则更高级别,但仍可用于同步。

例如,您可以只打开两者之间的 TCP 套接字,并在轮到另一方时发送消息。也许有一个递增的数字。

也许更传统的东西是信号量:

http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html#semaphores

另外,这假定了一个现代的类 unix 平台。 Windows 可能非常不同。

看起来您已经有了一个管道,因此您可以使用它让每一方在完成打印后向另一方发送消息。另一方会进行阻塞读取,然后在消息发送后返回,打印,发回消息,然后返回阻塞读取。

关于c - 如何使进程交替?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16380349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com