我有以下问题:
我必须从各种终端启动一个进程,但我只能在启动一定数量的进程后才能开始运行该程序。换句话说,我必须以某种方式阻止进程,直到获得正确数量的进程。
我正在尝试通过使用称为“服务器”的第一个进程来使用 FIFO 来做到这一点。问题继续作为门票入口问题:“服务器”进程始终写入 FIFO,该 FIFO 将是下一个进程的编号。下一个过程获取它的“票”并将他的号码发送到“服务器”++。我基本上是这样编码的:
服务器:
count = 0;
fd_w = open ("client", O_WRONLY);
fd_r = open ("server", O_RDONLY);
do {
write (fd_w, &count, sizeof(int)); //Write on client's reading FIFO
read (fd_r, &count, sizeof(int)); //Read what clients wrote
printf ("Msg read: %d\n", count);
} while (count != 4);
printf ("Starting...\n");
客户:
fd_r = open ("client", O_RDONLY);
fd_w = open ("server", O_WRONLY);
read (fd_r, &count, sizeof(int)); // Read the ticket from server
count++;
write (fd_w, &count, sizeof(int)); // Write what should be the next ticket
//Wait until we have 4 processes
发生的情况是服务器等待第一个调用,但是当第一个进程到达时,它会正确读取服务器消息,将消息正确放回服务器,但服务器以某种方式在循环中交互 1 或 2(它似乎有点随机)和简单地结束。甚至没有打印“开始...”。任何想法为什么会发生这种情况?另外,我应该如何通知其他流程他们可以继续?
如果重要的话,我实际上对服务器和客户端使用相同的代码,我通过测试是否已经创建了“服务器”FIFO来检查哪个是哪个。但我想这并不重要。