在C#中,处理并发问题的一种常见方法是使用锁(lock)或者并发集合(Concurrent Collections)。以下是两种方法的简单示例:
- 使用锁(lock):
using System;
using System.Collections.Generic;
using System.Threading;
class Lottery
{
private readonly object _lock = new object();
private List _numbers;
public Lottery()
{
_numbers = new List();
}
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];
}
}
}
- 使用并发集合(Concurrent Collections):
using System;
using System.Collections.Concurrent;
using System.Threading;
class Lottery
{
private ConcurrentBag _numbers;
public Lottery()
{
_numbers = new ConcurrentBag();
}
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)时,需要确保在对共享资源进行操作时始终使用相同的锁对象。而使用并发集合时,可以利用内置的线程安全特性,从而简化代码。
请注意,这些示例仅用于说明如何处理并发问题。实际应用中,您可能需要根据具体需求进行调整。