AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit Threads und fmShareExclusive / fmShareDenyWrite?
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Threads und fmShareExclusive / fmShareDenyWrite?

Ein Thema von kaiser1401 · begonnen am 4. Jan 2008 · letzter Beitrag vom 4. Jan 2008
Antwort Antwort
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit Threads und fmShareExclusive / fmShareDenyWrite?

  Alt 4. Jan 2008, 14:28
Hallo,

weiß jemand ob es zu Problemen kommen kann wenn ich mehrere Threads in einer Anwendung habe und diese gleichzeitig auf eine Datei zugreifen wollen? (TFilestream) Die Streams werden entweder mit fmShareDenyWrite (zum lesen) oder fmShareExclusive (zum lesen und schreiben) geöffnet. Dies jeweils in einer Schleife um bei einer Exception (wenn jemand anderes die datei nutz) zu warten und es nocheinmal zu versuchen bis der timeout erreicht ist.

In der Hilfe steht ja das keine andere Anwendung auf die Datei zugreifen kann. Aber bei einem weiteren Thread der gleichen Andwendung sollte das doch auch keine Probleme geben, oder?

Kennt jemand da Irgendwelche Probleme in diesem Zusammenhang? Probleme treten nur sporradisch auf. Ich bin mir auch nciht sicher ob das die Ursache ist, aber beim Kunden steht es halt ab und zu nachdem beide Threads sehr Zeitnah (oder gleichzeitig, so genau ist das log nciht) an die gleichen Dateien müssen. Unter umständen klaufen sie dann aber nach einigen Minuten (<1 bis >60) wieder an..... Mal eben Testen ist leider auch nciht so einfach.

Also Wenn jemand ein solches Problem kennt her damit... sonst muss ich wohl weiter suchen.
inc(i);
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

Re: Problem mit Threads und fmShareExclusive / fmShareDenyWr

  Alt 4. Jan 2008, 18:13
Dass eine andere Anwendung mit den Flags gesperrt wird hat schon seinen Sinn. Eine Ebene tiefer existiert genau dasselbe Problem bei mehrere Threads. Der gleichzeitige Zugriff über ein Dateihandle (das nutzt TFileStream ausgiebig) mit mehreren Threads funktioniert eben nicht immer. Gleichzeitiges Lesen dürfte kein Problem sein, doch schon beim Schreiben und Lesen oder sogar doppeltem Schreiben, können mehrere Datenbereichen im Müll enden.
Da die WinAPI (die nutzt ja TFileStream) nicht threadsicher ist, ist es die Aufgabe des Programmierers zu verhindern, dass mehrere Threads gleichzeitig auf dieses Handle zugreifen. Du musst es also koordinieren, sei es mit Critical Sections oder anderen Mechanismen.

Ich weiß grade garnicht, was passiert wenn jeder Thread sein eigenen TFileStream hätte. Ich vermute aber mal stark, dass die Flags den Zugriff auf Handleebene steuerun und nicht auf Prozessebene.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem mit Threads und fmShareExclusive / fmShareDenyWr

  Alt 4. Jan 2008, 18:16
Es hat jeder Thread sein eigenen Filestrem, nur halt auf die gleiche Datei. und scheinbar auch möglicherweise gleichzeitig.... Ich werds Montag mal versuchen die stellen nochmal extra mit critical sections zu schützen... und dann mal sehen was das Produktiv so macht....
inc(i);
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

Re: Problem mit Threads und fmShareExclusive / fmShareDenyWr

  Alt 4. Jan 2008, 18:27
Wenn du Critical Section verwendest oder Mutex, Semaphoren usw. kann es passieren, dass zwei Threads sich gleichzeitig ausschließen (race condition) und dann warten Sie, auf dass der andere den Lock löst.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem mit Threads und fmShareExclusive / fmShareDenyWr

  Alt 4. Jan 2008, 18:28
Es ist egal ob es ein anderer Thread, ein ander Prozess oder der selbe Thread ist. Sobald eine Datie exclusiv geöffnet ist kann sie nicht nochmal geöffnet werden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: Problem mit Threads und fmShareExclusive / fmShareDenyWr

  Alt 4. Jan 2008, 18:30
Dachte ich eigentlich auch. Spielt ja alles mit den Handles rum.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz