我们可以在 fork() C 调用的进程之间切换吗,比如切换播放器

标签 c switch-statement fork exec

例如,我小时候使用 fork 调用 4 player.c 并想创建棋盘游戏,并且在每个玩家完成转弯后,程序将暂停该 player.c 并切换到另一个它会像这样重复,直到有人赢得比赛

最佳答案

这似乎是某种形式的互斥可能实现的。这个问题相当模糊,所以我的回答也将更笼统,而不是提供代码

但是首先你必须考虑这里是否真的需要多处理。使用多个进程的主要原因是您的程序可以同时执行多个任务。

看起来实际上您只是想序列化一系列任务。但是,由于您看起来很新(如果这个假设是错误的,我深表歉意)我假设您仍然想了解多处理,即使它不是这里的最佳解决方案。

好吧,从最一般的意义上看,有两种基本方法可以查看多个进程,共享资源/对象和消息传递。

共享资源的操作是让多个进程同时访问同一内存、文件或其他一些东西。如果您希望采用这种方法,假设您使用的是存在 fork 的 POSIX 操作系统,您将需要查看 POSIX 中的 mmap 或共享内存调用集以及 POSIX 互斥或信号量对象。

但是,如果您希望使用消息传递,您可以研究 POSIX 消息队列或更简单的 UNIX 套接字或管道,甚至只是写入和读取文件。

我无法建议您使用哪种技术,因为性能差异非常复杂且相当微妙,超出了本答案的范围。但是,我会研究这两种技术,看看在概念上最适合您的是什么。

关于我们可以在 fork() C 调用的进程之间切换吗,比如切换播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36518272/

相关文章:

Python TEA 实现

java - 如何匹配 switch 语句中的正则表达式?

c++ - 如何从 fork 中检索类的实例?

子进程等待另一个进程完成并且 main() 没有执行到最后

azure - 在 Azure 中取消 fork 存储库与父级存储库的关联

c - 将 'void'传递给不兼容类型 'const char *'的参数?

c - 创建目录时出现段错误(核心转储)

c - 将数据从 cygwin 可执行文件 [C] 传输到托管程序 [托管 C++]?

c# - 为什么 C# 不允许在 switch 语句的不同 case block 中声明具有相同编号的变量?

c++ - 为什么不能在 switch 语句中声明变量?