c# 同步机制的示例代码
时间: 2023-10-28 07:02:15 浏览: 35
当涉及到多线程编程时,C# 提供了几种同步机制来确保线程安全性和协调执行。下面是一些常见的同步机制示例代码:
1. 使用 lock 关键字来实现互斥锁:
```csharp
class BankAccount
{
private int balance = 0;
private object lockObj = new object();
public void Deposit(int amount)
{
lock (lockObj)
{
balance += amount;
}
}
public void Withdraw(int amount)
{
lock (lockObj)
{
if (balance >= amount)
{
balance -= amount;
}
else
{
Console.WriteLine("Insufficient balance");
}
}
}
}
```
2. 使用 Monitor 类来实现互斥锁:
```csharp
class BankAccount
{
private int balance = 0;
private object lockObj = new object();
public void Deposit(int amount)
{
Monitor.Enter(lockObj);
try
{
balance += amount;
}
finally
{
Monitor.Exit(lockObj);
}
}
public void Withdraw(int amount)
{
Monitor.Enter(lockObj);
try
{
if (balance >= amount)
{
balance -= amount;
}
else
{
Console.WriteLine("Insufficient balance");
}
}
finally
{
Monitor.Exit(lockObj);
}
}
}
```
3. 使用 SemaphoreSlim 类来实现信号量:
```csharp
class PrintQueue
{
private SemaphoreSlim semaphore = new SemaphoreSlim(1);
public void PrintJob(string jobName)
{
Console.WriteLine($"[{DateTime.Now}] Job '{jobName}' is waiting for the printer.");
semaphore.Wait();
try
{
Console.WriteLine($"[{DateTime.Now}] Job '{jobName}' is being printed.");
Thread.Sleep(2000); // 模拟打印任务耗时
Console.WriteLine($"[{DateTime.Now}] Job '{jobName}' has been printed.");
}
finally
{
semaphore.Release();
}
}
}
```
这些示例代码展示了一些常见的同步机制,你可以根据自己的需求选择适合的方法来确保线程安全和协调执行。