ist gleichzeitiges lesen (thread 1) und schreiben (thread2) einer textdatei threadsafe ?
thread 1 liest nur
thread 2 schreibt nur
getestet mit File.OpenRead / File.AppendText
The process cannot access the file 'c:\test.txt' because it is being used by another process.
Hallo,
getestet mit File.OpenRead / File.AppendText
was will uns der Dichter damit sagen?
"Ich habe die Forumssuche nicht benutzt."
Ansonsten funktioniert das wie bei jeder gemeinsam genutzten Ressource - der Zugriff muss synchronisiert werden.
Versuchs mit
Lock
Hallo snupi,
gleichzeitiges lesen (thread 1) und schreiben (thread2) einer textdatei
also erstmal stellt sich die Frage, warum zwei Threads über eine Datei kommunizieren, wo ihnen doch alle anderen Möglichkeiten der Kommunikation offen stehen? Oder liegen die beiden Threads nicht in demselben Prozess?
The process cannot access the file 'c:\test.txt' because it is being used by another process.
Um überhaupt gemeinsam zugreifen zu können, braucht es auf beiden Seiten den passenden FileShare-Modus.
Lock
Braucht man bei Dateioperationen nicht unbedingt. Aber blind darf man natürlich auch nicht vorgehen. Insgesamt ist Synchronisation ein durchaus umfangreiches, komplexes, kompliziertes und tückisches Thema, das man nicht einfach mal so nebenbei erledigt. Man sollte dabei wirklich genau wissen, was man tut, sonst kann es leicht passieren, dass ein Programm auf dem eigenen Rechner läuft, aber auf anderen ständig nervige Probleme bereitet. Stichwort Race Condition.
Am besten du beschäftigst dich mal gründlich mit dem Thema [Artikel] Multi-Threaded Programmierung.
herbivore
es wird nicht über files kommuniziert sondern ein thread schreibt daten in das file (ähnlich logdaten) und ein thread kann diese daten wieder ausgeben
das mit lock hatte ich eh - nur dachte ich wenn einer NUR liest und einer NUR schreibt wäre gleichzeitig möglich
... multithreading und synchronisation ist mir schon klar 😉
Hallo snupi,
es wird nicht über files kommuniziert sondern ein thread schreibt daten in das file (ähnlich logdaten) und ein thread kann diese daten wieder ausgeben
... und genau das ist doch eine Kommunikation über eine Datei. Der eine Thread könnte dem anderen die Daten ja auch direkt übermitteln, bzw. sie könnten auf gemeinsame Daten zugreifen.
herbivore
das problem ist, dass es ein file geben muss, da auch nach pc-neustart die daten vorhanden sein müssen
habe jetzt um die fileoperatoren das locking wieder eingeführt