将Java应用程序移植到C#的一部分是在C#中实现同步的消息缓冲区。通过同步,我的意思是线程可以安全地写入和读取消息。
在Java中,可以使用synchronized
方法和wait()
以及notifyAll()
解决此问题。
示例:
public class MessageBuffer {
// Shared resources up here
public MessageBuffer() {
// Initiating the shared resources
}
public synchronized void post(Object obj) {
// Do stuff
wait();
// Do more stuff
notifyAll();
// Do even more stuff
}
public synchronized Object fetch() {
// Do stuff
wait();
// Do more stuff
notifyAll();
// Do even more stuff and return the object
}
}
如何在C#中实现类似的功能?
答案 0 :(得分:6)
在.NET中,您可以使用{/ 1}}语句,如
lock
您正在寻找的是互斥或事件。
您可以使用object oLock = new object();
lock(oLock){
//do your stuff here
}
- 类并通过
ManualResetEvent
另一个线程最终调用
ManualResetEvent mre = new ManualResetEvent(false);
...
mre.WaitOne();
通知另一个线程它可以继续。
看here。
答案 1 :(得分:4)
试试这个:
using System.Runtime.CompilerServices;
using System.Threading;
public class MessageBuffer
{
// Shared resources up here
public MessageBuffer()
{
// Initiating the shared resources
}
[MethodImpl(MethodImplOptions.Synchronized)]
public virtual void post(object obj)
{
// Do stuff
Monitor.Wait(this);
// Do more stuff
Monitor.PulseAll(this);
// Do even more stuff
}
[MethodImpl(MethodImplOptions.Synchronized)]
public virtual object fetch()
{
// Do stuff
Monitor.Wait(this);
// Do more stuff
Monitor.PulseAll(this);
// Do even more stuff and return the object
}
}