2014-07-07 108 views
1

我有我想要的收购(锁定)函数调用的资源的情况下释放,但我在回调(不同的线程)信号的过程的结束。 (资源是外部的:基本上,有一定的总线变得繁忙时,我开始并再次是免费的回调。)同步对象在一个线程锁定,而在另一个

带锁/关键部分,这是根本不可能的。我也尝试过互斥,但只能得到异常,可能是因为我在另一个线程中释放。

这里有什么选择?

看来,我可以

  1. 创建布尔“手工”同步它们(锁定访问挥发性布尔,然后做了一段时间()睡觉的WaitOne代替)
  2. 使用事件单 - 在第三个包装线程中将所有东西线程化,然后同时管理同步对象

为了简单起见,我可能会去布尔。或者最好是运行时提供的任何机制。 回调来自外部库。

更新:我也刚才发现的信号,这似乎符合我的需要。我会问任何人,以防有人有更好的主意/别人认为这有用。

+0

对于你想要做什么,你能**非常具体吗?我*怀疑*你想要什么可以使用'Monitor.Wait'和'Monitor.Pulse' /'Monitor.PulseAll'完成 –

+0

@Marc我想同时请求我的操作的几个线程同步。我的问题是,操作从我开始请求到回调被调用时。从查看MSDN中的Monitor,我无法调用进入并在2个不同的线程中离开。要使用Pulse,我必须编写自己管理资源访问的逻辑。 –

+2

@AndreasReiff听起来像是你想有一个信号,然后 –

回答

2

一种简单的方法来解决你的问题是使用AutoResetEvent:你等待它在一个线程,并通知即可解除锁定的其他线程。

+0

另一个有用的链接http://www.albahari.com/threading/part2.aspx#_AutoResetEvent –

+0

@ ken2k我这样做实际上使异步调用同步:主叫方要求操作并通过一个事件等待回调。但是现在我想同时同步多个请求操作的线程,这是禁止的。 –

+1

@AndreasReiff如果你想同步_several_线程,那么你应该去一个信号量。 – ken2k

相关问题