C++ 我们把';Shm_unlink()&x27;

C++ 我们把';Shm_unlink()&x27;,c++,linux,ipc,shared-memory,C++,Linux,Ipc,Shared Memory,我一直在研究linux中的共享内存。 C++中的1个生产者过程和3个消费者过程。 生产者进程通过'shm_open()'调用创建共享内存 3消费者进程从共享内存读取数据 您能给我建议一个最好的解决方案,在用户进程读取所有数据后删除共享内存吗 我们如何知道进程仍在从共享内存读取数据?一个解决方案是,生产者必须事先知道消费者的数量。否则,无法知道将来何时以及有多少进程需要打开该文件,因此您永远不知道何时可以安全地删除该文件 生产者在共享文件中存储整数个预期使用者。使用MAP\u SHARED映射文件

我一直在研究linux中的共享内存。 C++中的1个生产者过程和3个消费者过程。 生产者进程通过'shm_open()'调用创建共享内存

3消费者进程从共享内存读取数据

您能给我建议一个最好的解决方案,在用户进程读取所有数据后删除共享内存吗


我们如何知道进程仍在从共享内存读取数据?

一个解决方案是,生产者必须事先知道消费者的数量。否则,无法知道将来何时以及有多少进程需要打开该文件,因此您永远不知道何时可以安全地删除该文件

生产者在共享文件中存储整数个预期使用者。使用
MAP\u SHARED
映射文件后,每个使用者都会自动递减该整数,当该整数达到0时,文件可以取消链接

请注意,文件打开后可以立即取消链接。取消链接将从文件系统中删除文件名,直到文件的最后一个用户关闭和/或取消映射文件内容,文件内容才会被删除



或者,使用一个cronjob来删除超过指定持续时间的文件。

是否有通知机制来指示生产者?@sumith有@sumith您想通知生产者什么?生产者创建共享内存并将数据写入其中。使用者从共享内存读取数据。如果生产者在读取期间调用“shm_unlink()”,则使用者进程无法读取数据。生产者不知道有多少进程使用共享内存。我希望制作人只有在消费者阅读完所有内容后才能删除共享内存。@sumith您所描述的问题最好通过制作人将其写入常规文件来解决。您可以更详细地描述您的问题,以获得更好的建议。生产者和消费者之间有什么样的互动?共享文件包含什么类型的数据?