本示例展示了如何使用C#语言解决经典的多生产者多消费者同步问题。通过高效利用.NET并发库中的工具和机制,该程序能够确保线程安全,并优化资源访问效率。
本段落介绍了基于C#实现的多生产者多消费者同步问题,并提供了相关代码示例供参考。
以下是用于处理多个生产者和消费者的代码:
```csharp
using System;
using System.Threading;
public class HoldIntegerSynchronized {
private int[] buffer; // 缓冲区
private int occupiedBufferCount = 0;
private int readPosition = 0, writePosition = 0;
public HoldIntegerSynchronized(int bufferSize) {
this.buffer = new int[bufferSize];
}
// 生产者方法,用于向缓冲区写入数据。
public void Produce(int value) {
while (occupiedBufferCount == buffer.Length)
Monitor.Wait(this); // 等待直到有空位
lock (this) {
buffer[writePosition] = value;
writePosition++;
if (++occupiedBufferCount > buffer.Length / 2)
Monitor.PulseAll(this);
}
}
// 消费者方法,从缓冲区读取数据。
public int Consume() {
while (occupiedBufferCount == 0)
Monitor.Wait(this); // 等待直到有可消费的数据
lock (this) {
var value = buffer[readPosition];
readPosition++;
if (--occupiedBufferCount < buffer.Length / 2)
Monitor.PulseAll(this);
return value;
}
}
}
```
这段代码的主要目的是在多线程环境中,通过同步机制确保多个生产者和消费者能够正确地使用共享缓冲区。