在多线程环境下,使用信号量或者锁可以避免竞争条件,保证线程安全,同时也可以避免线程的阻塞。请用c#举个这样的例子
时间: 2024-02-18 11:04:03 浏览: 239
下面是一个使用信号量来保证线程安全的 C# 代码示例:
```csharp
using System;
using System.Threading;
class BankAccount {
private int balance;
private SemaphoreSlim semaphore = new SemaphoreSlim(1);
public BankAccount(int balance) {
this.balance = balance;
}
public void Deposit(int amount) {
semaphore.Wait();
try {
balance += amount;
} finally {
semaphore.Release();
}
}
public void Withdraw(int amount) {
semaphore.Wait();
try {
balance -= amount;
} finally {
semaphore.Release();
}
}
public int GetBalance() {
return balance;
}
}
```
在这个示例中,使用了SemaphoreSlim来实现信号量的功能,Deposit()和Withdraw()方法在修改balance变量时,都会先获取信号量,然后再释放信号量,从而保证了线程安全。
SemaphoreSlim是一个轻量级的、高效的信号量实现,可以用于线程同步和互斥。Wait()方法会阻塞当前线程,直到有可用的信号量为止;Release()方法会释放一个信号量。使用SemaphoreSlim可以避免线程的阻塞,同时也可以保证线程安全。
阅读全文