C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



C#.NET / Das Beispiel cs_cons_Threading / Synchronisierte Aufrufe mit Semaphore

Synchronisierte Aufrufe mit Semaphore

Synchronisierte Aufrufe mit Semaphore

➪ Auch mit der Klasse Semaphore ist eine Synchronisierung von Threads möglich.


#region Semaphore
static Semaphore s = new Semaphore(1, 2);
private static void schreibeDatei_Semaphore()
{
  s.WaitOne();
  using (var sw = new StreamWriter(@"C:\TEST\Semaphoretest.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("Semaphore: Die Datei wurde geschrieben");
  s.Release();
}
/// <summary>Liest Werte aus einer Datei</summary>
private static void liesDatei_Semaphore()
{
  s.WaitOne();      
  string zeile = "";
  using (var sr = new StreamReader(@"C:\TEST\Semaphoretest.txt"))
  {
    while (!sr.EndOfStream) zeile = sr.ReadLine();
    sr.Close();
    Console.WriteLine($"Semaphore: {zeile}");
  }
  Console.WriteLine("Semaphore: Die Datei wurde gelesen");
  s.Release();
}
/// <summary>Die Methoden werden via Semaphore aufgerufen</summary>
/// <remarks>Funktioniert nur, wenn Semaphore korrekt initialisiert wurde. Andernfalls können sich die Prozesse sich überlagern.</remarks>
public static void Semaphore_enter()
{      
  try
  {        
    Thread t1 = new Thread(schreibeDatei_Semaphore);
    Thread t2 = new Thread(liesDatei_Semaphore);
    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_Threading8.html