我需要完全实现以下模式
R------- ---- ---- ------
W ---- ----- ----
如何使用 Monitor 实现这一点?下面的代码在某处包含错误,但我找不到它,我不熟悉多线程。
我需要像使用 fiber 一样的行为,但我无法更改运行时并且生产代码无法使用 yield return(C# 1.0)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static object o = new object();
static void Main(string[] args)
{
Monitor.Enter(o); // make writer wait at start
ThreadPool.QueueUserWorkItem(x => {
WaitForStart();
Console.WriteLine("Entering");
Yield();
Console.WriteLine("yield 1");
Yield();
Console.WriteLine("yield 2");
Yield();
Console.WriteLine("yield 3");
Yield();
Console.WriteLine("Exiting");
});
Console.WriteLine("Finishing");
Start(); // start th writer
Console.WriteLine("get 1");
Get();
Console.WriteLine("get 2");
Get();
Console.WriteLine("get 3");
Get();
Console.WriteLine("Finishing");
Console.ReadLine();
}
private static void Get()
{
Monitor.Enter(o);
Monitor.Pulse(o);
Monitor.Exit(o);
}
private static void Yield()
{
Monitor.Pulse(o);
Monitor.Exit(o);
Monitor.Enter(o);
}
private static void WaitForStart()
{
Monitor.Enter(o);
}
private static void Start()
{
Monitor.Pulse(o);
Monitor.Exit(o);
}
}
}