在进程之间共享设置而不使用数据库?

时间:2019-05-24 06:12:21

标签: c++ .net concurrency cross-platform application-settings

我需要在不使用SqlLite之类的数据库的情况下使用户设置可用于各种进程。

用户可以通过在GUI中选中/取消选中复选框来随时更改设置,而所有其他进程只能读取该设置。

具有多个过程的应用程序是为跨平台环境(Linux,OSX,Windows)构建的,并且使用了.NET和C / C ++的组合。

为了处理在读写设置时的并发问题,我认为可以将设置作为文件存储在平台的特定位置,并且当设置更改时,文件名将被重命名(因为这是原子操作)在大多数操作系统上:如果我已正确理解的话)。 然后,读取设置的过程仅需要知道位置和与设置状态相对应的文件名,而不必打开文件,而只需读取名称。

这将是可行的解决方案吗?如果没有,怎么解决?

2 个答案:

答案 0 :(得分:2)

我认为您的解决方案有些牵强,因为您需要通过以名称为设置值的设置来创建一个文件。一个应用程序的一个功能可能有很多空文件。

实际上,您不需要数据库,而是需要一个设置文件,例如.ini文件。

为了处理并发性,我认为您可以共享一个变量,该变量包含进程之间文件的路径(我们称其为 config_path )。每次进程必须访问文件时,它都会将互斥锁锁定在共享变量 config_path 周围,并在关闭文件时将其释放。

我希望这种解决方案能满足您的需求。

答案 1 :(得分:1)

在unix环境下,您可以查看shared memory;本质上,您可以在多个进程之间共享一个段或内存,而无需复杂的文件I / O。由于这是一个多操作系统程序,因此您可以查看memory-mapped files

一旦启动了此共享内存段,您就可以在每个进程中对其进行访问或对其进行更改(当然是使用mutices或semaphores)!