c - C - 两个同时运行的程序需要共享数据?
问题描述
我有两个 C 程序需要在一台小型计算机上同时运行才能进行一些模拟。一个程序将从单独的 Windows 机器接收用户输入,另一个程序将与另一台单独的机器通信,以便实际执行模拟算法。当小型计算机处于活动状态时,它们都将始终连接并始终打开端口。
我遇到的问题是用户输入的信息将在运行算法的程序中使用,即:不经常监听用户输入的程序。我看不到自己合并这两个程序,因为模拟需要非常快速的通信,并且不会因监听另一个端口而陷入困境。而且这种设置显然禁止简单地链接文件或花哨的标题工作。
那么,有人有什么想法吗?他们可以做的一件事是从硬编码位置的文件读取/写入数据,但这似乎很俗气。我应该放弃项目的当前大纲并转向不同的方向吗?
提前致谢!
解决方案
如果可能,我会将其构建为运行两个线程的单个进程,一个监听来自 Windows 机器的输入,另一个运行模拟本身。
这将使监听线程很容易就地更新数据,模拟线程将使用它。
一个棘手的部分是协调两者——如果模拟线程尝试读取数据而侦听线程尝试写入数据,那么您很可能会得到损坏的数据。
为避免这种情况,您可以(例如)拥有两个单独的数据区域,一个用于当前数据,一个用于下一代数据,因为它正在由侦听线程更新。
监听线程和模拟线程然后有一个原子标志(或者可能两个)来指示在给定时间每个应该使用哪个数据区域。
推荐阅读
- git - 是否所有 Github 存储库都需要用户名和电子邮件?
- java - 添加条件时,Firestore Query 无法获取文档
- image - 将图像坐标转换为圆坐标
- php - 防止在同一 ID 的项目之间重复,但可以在不同 ID 之间复制
- javascript - 如何使用 Javascript 添加基于页面 URL 的 Active 类
- c++ - 如何在 pthread 的线程中创建 memcpy?
- sql - 按日期计算滚动平均值和标准差
- javascript - 如果文本字段有值,则禁用选择框
- fonts - 我可以同时更改 Spotfire 交叉表的字体颜色和背景颜色吗?
- php - 如何将变量配置解析为库类