c#线程同步的问题与实例分析
本文导语: 本节内容: 使用两个线程来分别模拟生产者和消费者。 使用 Monitor 来模拟管理员。管理员在生产过剩时告诉生产者暂停生产,消费过剩时告诉消费者暂停消费。 例子: 代码示例: using System; using System.Collections.Generic; ...
本节内容:
使用两个线程来分别模拟生产者和消费者。
使用 Monitor 来模拟管理员。管理员在生产过剩时告诉生产者暂停生产,消费过剩时告诉消费者暂停消费。
例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
///线程同步模拟
namespace MultiThread
{
class Problem
{
static int[] buffers=new int[3];
static int readLocation=0;
static int writeLocation = 0;
static object locker=new object();
static int blankCount = 3;
private int Buffer
{
get
{
lock (locker)
{
if (blankCount >= 3)
{
Console.WriteLine("buffers are all empty now! Consumer waits!");
Monitor.Wait(locker);
}
readLocation = readLocation % 3;
int buffer = buffers[readLocation];
buffers[readLocation] = 0;
readLocation++;
blankCount++;
Monitor.Pulse(locker);
return buffer;
}
}
set
{
lock (locker)
{
if (blankCount