gpt4 book ai didi

c# - 如何使用 Mutex 或 EventWaitHandle 同步 4 个不同的进程

转载 作者:行者123 更新时间:2023-11-30 16:03:03 29 4
gpt4 key购买 nike

我找到了几种使用命名互斥锁或 .Net 中可用的其他锁来同步 2 个不同进程的方法,但我还没有找到如何对 2 个以上的进程进行同步。

我需要同步 4 个访问共享资源的不同进程。我试过:

        bool createdNew;
using (EventWaitHandle eventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset, MutexName, out createdNew))
{
if (!createdNew)
{
eventWaitHandle.WaitOne();
}

... Critical section

eventWaitHandle.Set();
}

但只适用于 2 个进程,当设置句柄时,所有等待进程同时启动。

有什么想法吗?

最佳答案

你仍然可以使用互斥锁:

static void Main(string[] args) {
bool owned;
// first process will achieve ownership here, when creating
var mutex = new Mutex(true, "mymutex", out owned);
try {
if (!owned) {
// other processes will wait here, but only one will be released at a time
owned = mutex.WaitOne();
}
Console.WriteLine($"Using the mutex on process {Process.GetCurrentProcess().Id}");
Console.ReadLine();
}
finally {
if (owned)
// if we own mutex - release to allow next processes to come in.
mutex.ReleaseMutex();
}
}

当然,您可能希望将其包装到方便的 IDisposable 类中。不要忘记在 WaitOne 中设置适当的超时时间。

关于c# - 如何使用 Mutex 或 EventWaitHandle 同步 4 个不同的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943773/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com