Zum Inhalt springen

2 Thraeds und 1 statische Klasse


McSaesch

Empfohlene Beiträge

Moin,

ich hab ein kleines Problem mit einer Anwendung. Meine Klasse A führt eine riesen Berechnung durch, die sehr lange dauern würde. Deshalb wollte ich 2 Threads dieser Klasse anlegen und die Berechnung aufteilen. Das Ergebnis jeder Berechnung soll in eine XML geschrieben werden. Die Klasse des Writers ist statisch. Und genau an der STelle knallt es dann zu unbestimmter Zeit immer mal wieder. Da vermischen sich die Ergebnisse.

Kann mir da jemand was zu sagen, auch im Hinblick auf Threadsicherheit etc...

Thx

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kurz gesagt: Deine Klassen versuchen vermutlich gleichzeitig auf eine Ressource zuzugreifen...

Wie meine Vorposter schon gesagt haben: Lies dich mal in Threadsicherheit ein... Im Prinzip ist es dann so, dass ein Thread sich seine Ressource locked und sie benutzt. In dieser Zeit kann der andere Thread diese Ressource nicht benutzen und muss warten.

Nach der Benutzung gibt der erste Thread die Ressource frei und der zweite Thread darf die Ressource nutzen... :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nach der Benutzung gibt der erste Thread die Ressource frei und der zweite Thread darf die Ressource nutzen... :)

... was letztlich 2 Threads für "eine riesen Berechnung" nicht empfehlbar macht, dann sollte lieber eine Thread genutzt werden und er führt beide Berechnungen aus (damit das Programm währenddessen nicht blockt), benachrichtigt dann eine Funktion und diese schreibt die Ergebnisse in eine Datei oder was auch immer.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nabend

Ich bin bei lock() fündig geworden. Hier mal ein kleines Bsp:


using System;

using System.Collections.Generic;

using System.Text;

using System.Threading;

using System.IO;


namespace test_multithreads

{

	class Program

	{

		static void Main(string[] args)

		{

			test Test = new test();


			Thread thread_1 = new Thread(new ThreadStart(Test.testschreiben));

			Thread thread_2 = new Thread(new ThreadStart(Test.testschreiben));


			thread_1.Name = "Thread_1";

			   thread_2.Name = "Thread_2";


			thread_1.Start();

                       thread_2.Start();

		}


	}

	class test

	{

		public void testschreiben()

		{

			lock (this)

			{

				string internerText = string.Empty;


				for (int i = 1; i < 100000; i++)

				{

					Writer.schreibeInText(("Thread: " + i.ToString() + "\tThreadname: " + Thread.CurrentThread.Name));

				}

			}

		}

	}


	static class Writer

	{

		static StreamWriter sw = new StreamWriter(@"C:\test.txt");


		public static void schreibeInText(object text)

		{

			sw.WriteLine("Test: " + Thread.CurrentThread.Name + " : " + text);

		}

	}

}

Das funktioniert auch alles wunderbar, allerdings werden die letzten Zeilen des 2. Threads nicht in die Datei geschrieben, und ich hab keine Ahnung warum nicht?!?!

Jemand eine Idee??:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

hier ein paar Tipps (...obwohl in den vorherigen Postings alles steht, was du zur Lösung deines Problems wissen musst):

  • Wenn dein Programm die Main-Funktion verlässt, ist dein Programm beendet
  • Streams sollte man schließen
  • Das Design mit der Writer Klasse und dem statischen StreamWriter ist meiner Meinung nach fragwürdig...

Viel Erfolg!

mep

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...