スレッドの操作中にセマフォを使用する方法を理解しようとしています。
同じリソース (Arraylist) を使用する 2 つのスレッドがあります。1 つの方法はリストにランダムな温度を追加し、もう 1 つの方法はリストの平均温度を計算します。
このコンテキストでセマフォ プロパティの Wait および Release を使用するにはどうすればよいですか? また、リストに何かが追加された後に平均温度を計算するスレッドが開始されるように制御するにはどうすればよいですか。
これは私のコードの一部です:
class Temperature
{
private static Random random = new Random();
private static ArrayList buffer = new ArrayList();
static SemaphoreSlim e, b;
public static void Main (string[] args)
{
e = new SemaphoreSlim(6); //how will this work?
b = new SemaphoreSlim(1);
Thread t1 = new Thread (Add);
t1.Start ();
Thread t2 = new Thread (Average);
t2.Start ();
}
public static void Add()
{
int temperature;
for (int i=0; i<50; i++)
{
temperature = random.Next (36, 42);
Console.WriteLine ("Temperature added to buffer: " + temperature);
b.Wait ();
e.Wait ();
buffer.Add(temperature);
b.Release ();
Thread.Sleep (50);
}