Hallo Zusammen!
Folgende Frage beschäftigt mich?
Die Funktion "MachWas" sollte eigendlich Threadsicher sein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Function TTest.MachWas(Value : Integer) : Integer; begin EnterCriticalSection(fLock); Result := Value + Value; LeaveCriticalSection(fLock); end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Procedure TThread1.Execute; begin While not Terminated do begin fTest.Machwas(10); end end |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Procedure TThread2.Execute; begin While not Terminated do begin fTest.Machwas(20); end end |
Beide Threads werde gestartet.
Thread1 ruft "Machwas" mit dem Wert 10 auf und steht vor //2
Thread2 ruft "MachWas" mit dem Wert 20 auf und wird durch "EnterCriticalSection" in Machwas erstmal daran gehindert weiter zu machen.
Thread1 wird jetzt weiter ausgeführt. Welchen Wert hat jetzt Value?
Da Thread2 ja bereits in die Function reinkam und seinen Wert in Value übergeben hat.
Rechnet jetzt "MachWas" mit dem Wert 10 von thread1 oder mit dem Wert 20 von thread2?
Vielen Dank!
Erich
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Do 22.03.2012 um 21:45