私は 2 つのスレッド (プリンターとカウンター クラス) を持っています。では、最後に更新された数値を印刷した後にプリンター スレッドの実行を停止するにはどうすればよいでしょうか。最後の番号を 1 回または複数回表示することがあります。基本的に必要なのはプロパティを更新することであり、そのプロパティが更新されるたびに、更新された値をコンソールに出力する必要があり、プリンタースレッドは実行される更新の数を知りません。したがって、更新スレッドが更新を停止すると、停止する必要があります。
コードは次のようになります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Threads
{
class Storage
{
static int _number;
public readonly static object LockNumber = new object();
public static int Number
{
get
{
lock(LockNumber)
{
Monitor.Pulse(LockNumber);
return _number;
}
}
set
{
lock(LockNumber)
{
_number = value;
Monitor.Pulse(LockNumber);
Monitor.Wait(LockNumber);
}
}
}
}
class Counter
{
public Thread t = new Thread(new ThreadStart(CounterFunction));
public Counter()
{
t.Start();
}
public static void CounterFunction()
{
for (int i = 0; i < 25; i++)
{
Storage.Number = i;
}
}
}
class Printer
{
public Thread t1 = new Thread(new ThreadStart(Print));
public Printer()
{
t1.Start();
}
public static void Print()
{
while (true)
{
Console.WriteLine("Number is " + Storage.Number);
}
}
}
class Check
{
static void Main()
{
Storage s1 = new Storage();
Counter c = new Counter();
Printer p = new Printer();
c.t.Join();
if (!c.t.IsAlive)
{
p.t1.Abort();
}
Thread.Sleep(10000);
}
}
}