在C#中,處理并發問題的一種常見方法是使用鎖(lock)或者并發集合(Concurrent Collections)。以下是兩種方法的簡單示例:
using System;
using System.Collections.Generic;
using System.Threading;
class Lottery
{
private readonly object _lock = new object();
private List<int> _numbers;
public Lottery()
{
_numbers = new List<int>();
}
public void AddNumber(int number)
{
lock (_lock)
{
_numbers.Add(number);
}
}
public int GetRandomNumber()
{
lock (_lock)
{
Random random = new Random();
int index = random.Next(_numbers.Count);
return _numbers[index];
}
}
}
using System;
using System.Collections.Concurrent;
using System.Threading;
class Lottery
{
private ConcurrentBag<int> _numbers;
public Lottery()
{
_numbers = new ConcurrentBag<int>();
}
public void AddNumber(int number)
{
_numbers.Add(number);
}
public int GetRandomNumber()
{
Random random = new Random();
int[] numbersArray = _numbers.ToArray();
int index = random.Next(numbersArray.Length);
return numbersArray[index];
}
}
這兩種方法都可以有效地處理并發問題。使用鎖(lock)時,需要確保在對共享資源進行操作時始終使用相同的鎖對象。而使用并發集合時,可以利用內置的線程安全特性,從而簡化代碼。
請注意,這些示例僅用于說明如何處理并發問題。實際應用中,您可能需要根據具體需求進行調整。