在共享内存的结构中初始化一个int

时间:2015-09-24 00:36:27

标签: c

我有一个用于跟踪队列中单词的int,但我正在处理应该在多次执行中持续存在的共享内存。因此,我不能简单地陈述

int words = 0;

作为全局变量,因为每次运行程序时都会被覆盖。我的结构目前看起来像这样

typedef struct {
  /* List of words stored in the FIFO. */
  Word list[ MAX_WORDS ];
  int words;

} FIFO;

我只需要在第一次运行时将'words'初始化为0,然后该值应该通过共享内存保持不变,但我不知道如何在不运行的情况下将其重置为0。

任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:2)

创建新的共享内存区域时,它会自动初始化为零。 Linux上的shmget和Windows上的CreateFileMapping都是如此。在其他系统上可能相同,但您必须在文档中进行搜索。在实践中,这意味着只要您实施了正确的锁定方案,您的应用程序将只能看到共享内存的2个状态 - 全部为零(您是第一个打开它)或已初始化(另一个实例已打开)之前的共享内存。)

我不确定你真的想要共享内存。如果"应该坚持多次执行"你的意思是同时执行多个进程,然后这个答案适用。但是如果你想运行你的应用程序,然后关闭它,然后再次运行它并拥有相同的FIFO,那么你需要将它写入某个文件或嵌入式/外部数据库。