【发布时间】:2012-02-09 11:14:11
【问题描述】:
我在执行 MemoryMappedFile 流式传输时遇到了一个小问题。 我有 2 个项目,一个用于发送字节,另一个用于读取字节。在这两个进程之间应该有一个 2 秒的睡眠定时器。
我已经实现了所有这些,但是当软件尝试进行读取时,它似乎遇到了死锁。两个进程的代码如下。
谁能帮我找到问题?
namespace ProcesComunication
{
class Program
{
static void Main(string[] args)
{
MemoryMappedFile mmf = MemoryMappedFile.CreateNew("AAB", 1024);
MemoryMappedViewStream mStream = mmf.CreateViewStream();
BinaryWriter bw = new BinaryWriter(mStream);
Mutex mx = new Mutex(true, "sync");
while (true)
{
Thread.Sleep(2000);
Console.WriteLine("TEST");
bw.Write(DateTime.Now.ToString());
mx.ReleaseMutex();
}
bw.Close();
mStream.Close();
}
}
}
namespace ProcesRead
{
class Program
{
static void Main(string[] args)
{
MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("AAB");
MemoryMappedViewStream mStream = mmf.CreateViewStream();
BinaryReader br = new BinaryReader(mStream);
Mutex mx = Mutex.OpenExisting("sync");
while (true)
{
mx.WaitOne();
Console.Write(br.ReadString());
mx.ReleaseMutex();
}
br.Close();
mStream.Close();
}
}
}
【问题讨论】:
-
准确地说,描述死锁出现的位置/时间。写作是否开始了?
-
编写器将在循环中第二次调用 ReleaseMutex 时崩溃。它没有获得互斥锁。单个互斥锁不足以同步读取器和写入器。您真的想在这里使用命名管道。