尝试获取先前获取的互斥锁时出现异常

发布于 2024-10-31 14:57:42 字数 407 浏览 6 评论 0原文

我有以下几行代码:

// index is an integer
Mutex mutex = new Mutex(false, "MUTEX_PREFIX" + index.ToString());
mutex.WaitOne();
// Access to the shared object which should not be accessed by multiple threads.
mutex.ReleaseMutex();

其他线程使用相同的逻辑(称为互斥体),因此我确保将正确的锁用于正确的资源。

问题是,如果另一个线程(或进程)获取了指定的互斥锁,则当前线程会出现异常,而不是在第二行被阻塞。

我需要的是等待一个命名的互斥体被释放,然后继续我的代码。

我哪里错了?

I have these lines of code:

// index is an integer
Mutex mutex = new Mutex(false, "MUTEX_PREFIX" + index.ToString());
mutex.WaitOne();
// Access to the shared object which should not be accessed by multiple threads.
mutex.ReleaseMutex();

The same logic (named mutex) is used by other threads, so I make sure the right lock is used for the right resource.

The problem is if the named mutex is acquired by another thread (or process), current thread gets an exception instead of get blocked on the second line.

What I need is waiting for a named mutex to be released and then continue with my code.

Where am I wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叫嚣ゝ 2024-11-07 14:57:42

完成后您必须调用 mutex.ReleaseMutex() 。您还可以捕获所有异常并释放和重新抛出;

典型的模式是使用锁来处理异常:

 lock (typeof(MyClass))
 {
     .. access to the share object
 }

You must call mutex.ReleaseMutex() when done. Also you catch all exceptions and release and the rethrow;

A typical pattern is to use lock, which copes with exceptions:

 lock (typeof(MyClass))
 {
     .. access to the share object
 }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文