Martin <f...@mfriebe.de> schrieb am Di., 1. Okt. 2019, 17:19: > I am currently looking at a strange issue in FpDebug. > > The main thread loads a lot of data from a file, and creates various > objects. > > Then some code is executed in a sub-thread. The timing of that > (start/stop of the 2 threads) is handled by RTLeventSetEvent / > RTLeventWaitFor. > This code does not seem to find (some of/ all?) the data. (for > comparison, on windows the same code continues to run in the main > thread, and finds the data). > > So the suspicion arises that maybe the thread has older data cached? > > Therefore my question: > Does RTLeventSetEvent / RTLeventWaitFor make sure memory is synchronized > between threads? > > //MAIN thread > procedure TFpDebugDebugger.ExecuteInDebugThread(AMethod: > TFpDbgAsyncMethod); > begin > assert(not assigned(FFpDebugThread.AsyncMethod)); > FFpDebugThread.AsyncMethod:=AMethod; > RTLeventSetEvent(FFpDebugThread.StartDebugLoopEvent); > RTLeventWaitFor(FFpDebugThread.DebugLoopStoppedEvent); > RTLeventResetEvent(FFpDebugThread.DebugLoopStoppedEvent); > FFpDebugThread.AsyncMethod:=nil; > end; > > // OTHER thread > procedure TFpDebugThread.Execute; > begin > ... > repeat > RTLeventWaitFor(FStartDebugLoopEvent); > RTLeventResetEvent(FStartDebugLoopEvent); > if assigned(FAsyncMethod) then > begin > try > FAsyncMethod(); > finally > RTLeventSetEvent(FDebugLoopStoppedEvent); > end; > end; > until Terminated; > end; >
The functions themselves AFAIK don't have any memory barriers, so it would depend solely on the OS primitives. Regards, Sven >
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal