|
|
1
2
简单答案:共享
您可以使用共享内存将队列与某些同步机制(通常是互斥)保持在一起。注意不仅是
如果可以,请尝试查看更高级别的库,这些库可能为流程通信需求提供已经打包的解决方案。考虑 Boost.Interprocess 或者在您最喜欢的搜索引擎中搜索进程间通信。 |
|
|
2
3
我相信您的困惑来自于不理解父进程和子进程的内存地址空间之间的关系。这两个地址空间实际上是不相关的。是的,在fork()之后,两个进程包含几乎相同的内存副本,但您应该将它们视为副本。一个进程对其地址空间中的内存所做的任何更改都不会影响另一个进程的内存。 任何“普通的旧数据结构”(如C++标准库提供的)都是纯粹的内存抽象,所以没有办法使用它们来在这两个进程之间进行通信。要将数据从一个进程发送到另一个进程,必须使用提供进程间通信的多个系统调用之一。 但是,请注意,共享内存是一个例外。可以使用系统调用设置共享内存的一部分,然后在共享内存中创建数据结构。您仍然需要使用互斥体来保护这些数据结构,但是互斥体必须具有共享内存的意识。对于POSIX线程,您将使用pthread_mutexattr_init和pthread_process_shared属性。 |
|
|
3
1
我不认为有任何简单的方法可以在两个项目之间共享这样的结构/对象。如果要在两个进程之间实现一个队列/列表/数组等,则需要在进程之间实现某种通信,以管理队列和检索和存储条目。 例如,您可以在一个进程中实现队列管理,并实现某种类型的IPC(共享内存、套接字、管道等),以将条目从一个进程传递到另一个进程。 在标准C++库之外可能有其他方法来为您这样做。例如,可能存在已经实现此功能的增强库。 |
|
AstralHex · 矩阵乘法代码工作不正常 10 月前 |
|
|
Giogre · 为包含许多数值字段的简单“struct”重载比较运算符 11 月前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 11 月前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 11 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 11 月前 |