问题描述
我一直在研究Linux中的共享内存。 1个生产者过程和3个消费者过程在c ++中。 生产者进程通过“ shm_open()”调用创建共享内存。
3个使用者进程从共享内存中读取数据。
请问我可以建议我一个最好的解决方案,以便在通过使用者进程读取所有数据后删除共享内存。?
我们怎么知道进程仍在从共享内存中读取数据?
解决方法
一种解决方案是生产者必须提前知道消费者数量。否则,您将无法知道将来何时以及有多少个进程要打开该文件,因此您永远不知道何时可以安全地删除该文件。
生产者在共享文件中存储整数个预期的使用者。在使用MAP_SHARED
映射文件后,每个使用者原子地减小该整数,当它达到0时,可以取消链接文件。
请注意,打开文件后,文件可能会有所不同。取消链接会从文件系统中删除文件名,直到文件的最后一个用户关闭和/或取消映射文件后,文件内容才会删除。
或者,使用cronjob删除文件,然后删除指定时间之前的文件。