我有一个 int 来跟踪队列中的单词,但我正在使用应该在多次执行中持续存在的共享内存。因此,我不能简单地说
int words = 0;
作为全局变量,因为每次运行程序时它都会被覆盖。我的结构目前看起来像这样
typedef struct {
/* List of words stored in the FIFO. */
Word list[ MAX_WORDS ];
int words;
} FIFO;
我只需要在第一次运行时将“words”初始化为 0,之后该值应该通过共享内存保留,但我不知道如何做到这一点而不需要每次运行将其重置为 0。
任何帮助都会很棒,谢谢!
最佳答案
当您创建新的共享内存区域时,它会自动初始化为零。 Linux 上的 shmget
和 Windows 上的 CreateFileMapping
都是这种情况。在其他系统上可能是相同的,但您必须在文档中搜索。实际上,这意味着只要您实现了适当的锁定方案,您的应用程序将只能看到共享内存的 2 种状态 - 要么全零(您是第一个打开它的人),要么已经初始化(另一个实例打开了共享内存)之前的内存)。
不过,我不确定您是否真的想要共享内存。如果“应该在多个执行中持续存在”是指同时执行多个进程,那么这个答案适用。但是,如果您想运行您的应用程序,然后将其关闭,然后再次运行它并具有相同的 FIFO 可用,那么您只需将其写入某个文件或嵌入式/外部数据库即可。
关于c - 为共享内存初始化结构体中的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751582/