Parallelzugriff auf Daten

Teil 4: Programmieren für Multi-Core-Prozessoren

Beispiel für ReaderWriterLockSlim

Das folgende Beispiel zeigt die Verwendung der ReaderWriterLockSlim. Die drei Read-Threads lesen dabei eine Liste aus. Diese wird von zwei weiteren Write-Threads gefüllt.

class Program {
static ReaderWriterLockSlim rw = new ReaderWriterLockSlim();
static List<int> items = new List<int>();
static Random rand = new Random();

static void Main() {
new Thread (Read).Start();
new Thread (Read).Start();
new Thread (Read).Start();
new Thread (Write).Start("A");
new Thread (Write).Start("B");
}

static void Read() {
while(true) {
rw.EnterReadLock();
foreach (int i in items) Thread.Sleep(10);
rw.ExitReadLock();
}
}

static void Write(object threadID) {
while(true) {
int newNumber = GetRandNum(100);
rw.EnterWriteLock();
items.Add(newNumber);
rw.ExitWriteLock();
Console.WriteLine(threadID+ " added " + newNumber);
Thread.Sleep(100);
}
}

static int GetRandNum(int max) {
lock(rand) return rand.Next(max);
}
}