【问题标题】:How to create system wide variables?如何创建系统范围的变量?
【发布时间】:2016-04-22 14:54:28
【问题描述】:

我需要创建一组可以被整个计算机上的任何进程访问的变量。要求是进程之间的通信。这也可以只是一个需要反序列化的字符串。

这似乎是一个相当简单的问题。我已经研究过MutexSemaphore,但如果我没记错的话,这些类似乎是用于线程同步的。

除了创建文件或注册表项之外,是否有内置功能可以执行此操作?

【问题讨论】:

  • 我经常使用内存缓存产品来解决这种需求。 Memcached(一个旧的解决方案)或类似 hazelcast 的产品可以解决您的问题。除此之外,您可以使用 .Net 创建管道,但在并发方面很容易出错。
  • 我想避免为此使用 3rd 方库。
  • 管道是否创建了可能被防火墙阻止的套接字?为什么它们容易出错?
  • 不,管道不创建套接字,它不是 TCP 连接。您只需将内存中的一部分设置为进程之间共享。它很容易出错,因为您必须自己实现并发锁机制

标签: c# variables system global


【解决方案1】:

mutex可用于跨多个进程。

你用

创建它
 new Mutex(true, "theMutex");

并且可以通过使用从其他进程访问它

new Mutex(false, "theMutex");

您的 String int 构造函数是 Mutex 的系统范围标识符。您只能在创建它的一个进程中将第一个参数设置为 true。

(至少这是我今天在讲座中学到的)

【讨论】:

  • 我研究了互斥体,在我看来它们只是用于线程同步,而不是用于传递数据。或者有没有办法将实际的字符串传递给另一个进程?
  • 是的,我的错。我在 MSDN 上找到了这个:[进程间通信] (msdn.microsoft.com/en-us/library/windows/desktop/…)
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多