【问题标题】:Mutual exclusion across user session in Citrix environmentCitrix 环境中跨用户会话的互斥
【发布时间】:2011-03-07 09:01:40
【问题描述】:

我有一个在 Citrix 环境中运行的应用程序。该应用程序可以由不同用户会话中的多个用户同时运行。在我的应用程序中,我正在写入一个应该在所有用户会话中互斥的文件。我尝试了 Mutex 以避免从不同的用户会话写入文件,但是使用 Mutex 失败了,因为在某些情况下不同的用户会话无法检测到 Mutex 对象是否已经创建。

谁能告诉我以下哪种方法更好地实现所有用户会话的互斥:

  1. 使用命名管道: 如果命名管道已经存在,那么应用程序将等待管道被打开它的应用程序实例关闭。否则创建命名管道以指示获取锁。
  2. 使用锁定文件: 在磁盘上创建一个普通文件以指示获取锁定并在需要解锁时删除。

【问题讨论】:

    标签: windows citrix mutual-exclusion


    【解决方案1】:

    您不需要使用锁定文件。您可以使用内置的文件系统共享机制。

    当您通过调用CreateFile() 打开文件时,您将确定后续尝试使用dwShareMode 参数打开文件的共享访问权限。例如,将此设置为 0,其他进程将无法打开该文件。

    【讨论】:

    • 谢谢。但是我想稍后在其他进程完成写入该文件的任务时打开。基本上是互斥的
    • @aJ 当一个进程完成写入时,它会在文件句柄上调用CloseHandle,然后它再次可用。基本上,文件系统的接口已经为您实现了互斥。你真的不能尝试以任何其他方式做到这一点!
    • 但是进程必须等到其他进程调用CloseHandle。操作系统是否支持任何机制来“知道”其他进程何时完成写入?
    • @aJ 如果写作速度很快并且几乎没有争用,那么您可以循环睡眠。否则你可以回到你的互斥体并使用全局命名空间而不是本地命名空间,我猜这是你之前做错的。
    • 啊!全局命名空间——这可能对我有帮助。让我尝试。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多