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);
}
}