我在做一本操作系统书上的练习。我在实现两个进程之间的共享内存时遇到了困难。工作流程如下。
一个进程(A)启动另一个进程(B),而那个进程(B)会执行它的任务 - 称为Collatz猜想(这只是一个迭代的工作)。为了共享B的工作,B必须将他的工作写入流中。
以下是我的源代码(A)。
namespace collatz_conjecture
{
class colltz_conjecture
{
static void Main(string[] args)
{
Console.WriteLine("===== Start Process =====");
MemoryMappedFile mmf = MemoryMappedFile.CreateNew("test", (long)1e5 );
Process child = new Process();
child.StartInfo.FileName = "child.exe";
child.Start();
child.WaitForExit();
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, (long)1e5))
{
StreamReader sr = new StreamReader(stream);
Console.WriteLine(sr.ReadLine());
Console.WriteLine("===== End of Process =====");
}
}
}
}
以下是B源代码。
namespace child
{
class child
{
static void Main(string[] args)
{
Console.WriteLine("임의의 정수를 입력해주세요");
int n =Convert.ToInt32(Console.ReadLine());
try
{
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("test",MemoryMappedFileRights.Write))
{
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, (long)1e2))
{
StreamWriter sw = new StreamWriter(stream);
while (true)
{
sw.Write(n + " " );
Console.Write(n + " ");
if (n == 1) break;
if (n % 2 == 0) n /= 2;
else n = 3 * n + 1;
Thread.Sleep(500);
}
Console.WriteLine();
}
}
}
catch
{
while (true)
{
Console.Write("WHY IT DOESNT WORK????\n");
Thread.Sleep(500);
};
}
}
}
}
我认为我当时已经尽力了。我复制了MSDN的源代码(MSDN的示例),并将其粘贴到我的源代码中。它能够正常工作。
但是在我的源代码中,A只打印出空字符串...
使用StreamReader在MemoryMappedFile中被禁止了吗?还是有其他问题? 两个控制台的图片,左边是A,右边是B。