【发布时间】:2014-07-07 09:58:17
【问题描述】:
我有一种情况,我想在函数调用中获取(锁定)资源,但在回调(不同的线程)中收到进程结束的信号。 (资源是外部的:基本上,当我启动时某个总线很忙,并且通过回调再次空闲。)
对于锁定/临界区,这根本不可能。我也试过 Mutex,但只得到异常,可能是因为我在另一个线程中释放。
这里有哪些选项?
好像可以
- 创建 bool 以“手动”同步它们(锁定对 volatile bool 的访问,然后执行 while() sleep 而不是 WaitOne)
- 使用事件在第三个包装线程中对整个事物进行单线程处理,然后该线程还管理同步对象
为了简单起见,我可能会选择布尔值。或者最好是运行时提供的任何机制。 回调来自外部库。
更新:我刚刚也发现了信号量,这似乎符合我的需要。如果有人有更好的想法/其他人也觉得这很有用,我会问任何人。
【问题讨论】:
-
您能非常具体说明您想做什么吗?我怀疑你想要的可以用
Monitor.Wait和Monitor.Pulse/Monitor.PulseAll来完成 -
@Marc 我想同步多个线程同时请求我的操作。我的问题是操作从我开始请求到我的回调被调用。通过查看 MSDN 中的 Monitor,我无法在 2 个不同的线程中调用进入和离开。要使用 Pulse,我必须自己编写管理对资源的访问的逻辑。
-
@AndreasReiff 听起来你想要一个信号量,然后
标签: c# multithreading locking