static void Main(string[] args) { #region Grundlagen Threads //// Action a = new Action(MachEtwasInEinemThread); //// Action b = MachEtwasInEinemThread; //Thread t1 = new Thread(MachEtwasInEinemThread); //// Thread t1 = new Thread(new ParameterizedThreadStart(MachEtwasInEinemThread)); //Thread t2 = new Thread(MachEtwasInEinemThread2); //t1.Start(); //t2.Start(); ////Thread.Sleep(5000); //// Nach 5 sek: Thread beenden ////t1.Abort(); ////t2.Abort(); //// Auf einen Thread warten: //t1.Join(); //t2.Join(); #endregion #region Threadpool und Einstellungen //ThreadPool.QueueUserWorkItem(MachEtwasInEinemThread,12); //ThreadPool.QueueUserWorkItem(MachEtwasInEinemThread2,99); //// Einstellmöglichkeiten für Threads //Thread t1 = new Thread(MachEtwasInEinemThread); //t1.IsBackground = true; //t1.Priority = ThreadPriority.Normal; //t1.Start(42); #endregion #region Monitor //Console.OutputEncoding = Encoding.Unicode; //Konto meinKonto = new Konto(); //for (int i = 0; i < 100; i++) //{ // ThreadPool.QueueUserWorkItem(ZufälligesKontoupdate, meinKonto); //} #endregion #region Mutex //Mutex mutex = new Mutex(false, "MeinMutex"); //for (int i = 0; i < 100; i++) //{ // mutex.WaitOne(); // // hier darf wieder nur einer rein // Thread.Sleep(100); // Console.WriteLine(i); // mutex.ReleaseMutex(); //} #endregion #region Mit Mutex verhindern, dass die App mehrfach geöffnet wird //Mutex mutex = new Mutex(false, "MeinMutex"); //var offen = mutex.WaitOne(100,false); //if(offen) //{ // // logik // for (int i = 0; i < 1000; i++) // { // Console.Write("#"); // Thread.Sleep(100); // } //} //else //{ // // beenden // Console.WriteLine("Applikation ist bereits offen, beendet sich selbst in 5 sec"); // Thread.Sleep(5000); // return; //} //mutex.ReleaseMutex(); #endregion #region Semaphore SemaphoreZähler sz = new SemaphoreZähler(); for (int i = 0; i < 500; i++) { Thread t1 = new Thread(sz.MachWas); t1.Start(); } #endregion Console.WriteLine("---ENDE---"); Console.ReadKey(); }
static void Main(string[] args) { #region Threads ////Thread t1 = new Thread(Punkt); ////Thread t2 = new Thread(Strich); ////Thread t3 = new Thread(new ParameterizedThreadStart(Zeichen)); ////// Werden beim Schließen der Appliaktion ebenfalls sofort beendet ////t1.IsBackground = true; ////t1.IsBackground = true; ////t3.IsBackground = true; ////t1.Start(); ////t2.Start(); ////t3.Start('#'); ////Thread.Sleep(2000); ////// Thread beenden ////t1.Abort(); ////// Auf Threads warten ////t2.Join(); ////t3.Join(); //// ThreadPool //// ThreadPool.QueueUserWorkItem(Punkt); //// ThreadPool.QueueUserWorkItem(Strich); // ThreadPool.QueueUserWorkItem(Zeichen,'@'); #endregion #region Monitor und Lock //Console.OutputEncoding = Encoding.Unicode; //Konto k1 = new Konto(10_000); //for (int i = 0; i < 10; i++) //{ // ThreadPool.QueueUserWorkItem(ZufälligesKontoUpdate, k1); //} #endregion #region Mutex //Mutex mutex = new Mutex(false, "MeinMutex1234"); //for (int i = 0; i < 100; i++) //{ // mutex.WaitOne(); // Thread.Sleep(100); // Console.WriteLine(i); // mutex.ReleaseMutex(); //} #endregion SemaphoreZähler zähler = new SemaphoreZähler(); for (int i = 0; i < 500; i++) { new Thread(zähler.MachWas).Start(); } Console.WriteLine("---ENDE---"); Console.ReadKey(); }