XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT * DIVERSES



Diverses / Das Beispiel cs_cons_Threading / Synchronisierte Aufrufe mit SemaphoreSlim

Synchronisierte Aufrufe mit SemaphoreSlim

Synchronisierte Aufrufe mit SemaphoreSlim

➪ Auch mit der Klasse SemaphoreSlim ist eine Synchronisierung von Threads möglich. SemaphoreSlim ist ein vereinfachtes Konzept der Semaphore.


#region SemaphoreSlim
static SemaphoreSlim semslim = new SemaphoreSlim(1, 2);
private static void schreibeDatei_SemaphoreSlim()
{      
  semslim.Wait();
  using (var sw = new StreamWriter(@"C:\TEST\SemaphoreSlimtest.txt"))
  {
    long sum = 0;
    for (int i = 0; i < 1000001; i++)
    {
      sum += i;
      sw.WriteLine($"{i,15:N0}{sum,30:N0}");
    }
    sw.Close();
  }
  Console.WriteLine("SemaphoreSlim: Die Datei wurde geschrieben");      
  semslim.Release();
}
/// <summary>Liest Werte aus einer Datei</summary>
private static void liesDatei_SemaphoreSlim()
{
  semslim.Wait();
  string zeile = "";
  using (var sr = new StreamReader(@"C:\TEST\SemaphoreSlimtest.txt"))
  {
    while (!sr.EndOfStream) zeile = sr.ReadLine();
    sr.Close();
    Console.WriteLine($"SemaphoreSlim: {zeile}");
  }
  Console.WriteLine("SemaphoreSlim: Die Datei wurde gelesen");
  semslim.Release();
}
/// <summary>Die Methoden werden via SemaphoreSlim aufgerufen</summary>
/// <remarks>Funktioniert nur, wenn SemaphoreSlim korrekt initialisiert wurde. Andernfalls können sich die Prozesse sich überlagern.</remarks>
public static void SemaphoreSlim_enter()
{
  try
  {
    Thread t1 = new Thread(schreibeDatei_SemaphoreSlim);
    Thread t2 = new Thread(liesDatei_SemaphoreSlim);
    t1.Start();
    t2.Start();
    Thread.Sleep(1000);
  }
  catch (Exception exc)
  {
    Console.WriteLine(exc.Message);
  }
}
#endregion

wg / 5. April 2021



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/cs_Threading9.html