如何暂停和恢复线程

时间:2014-11-06 17:22:39

标签: c# compact-framework event-wait-handle

我有一个典型的Producer / Consumer问题,并试图同步2个线程。 我想在C#Compact Framework中找到Suspend()和Resume()的替代方法。他们都不是 由CF支持:(。我发现了一些基于EventWaitHandle的例子,使用类似的东西:

      private EventWaitHandle ewh = new AutoResetEvent();

但问题是AutoResetEvent也不是Compact Framework的一部分。我想知道是否有另一种方法可以使用EventWaitHandle解决此类生产者/消费者问题。 我知道AutoResetEvent派生自EventWaitHandle。您知道EventWaitHAndle的其他哪些子类?

2 个答案:

答案 0 :(得分:1)

如您所见,没有自动复位事件。但是你可以使用pinvoke来解决CreateEvent和WaitForSingleObject等问题。 或者,如果您只是想要同步对象的访问权限,只需使用“锁定”即可锁定'宾语。用法是伪代码:

线程1 而(真){   锁(myLockObject){     访问共享对象   }   Thread.sleep代码(1000) }

线程2 而(真){   锁(myLockObject){     访问共享对象   }   Thread.sleep代码(1100) }

每个线程将锁定同一个对象,一次只有一个线程可以访问共享对象。只有当锁定对象没有被另一个代码行(这里是另一个线程)锁定时,锁中的代码才会运行。你可以简单地用这个来暂停'并恢复一个线程。 Lock对象旨在实现对共享变量的同步访问。

OTOH,正如已经提到的,只需要调用本机CreateEvent,WaitForSingleObject,SetEvent API函数。

答案 1 :(得分:0)

我必须道歉,Compact Framework中确实有AutoResetEvent。 感谢Hans Passant建议使用Monitor类进行同步。