<div dir="auto"><div><div class="gmail_extra"><div class="gmail_quote">Am 24.10.2017 10:49 schrieb "el es via Lazarus" <<a href="mailto:lazarus@lists.lazarus-ide.org">lazarus@lists.lazarus-ide.org</a>>:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">On 24/10/17 09:11, Mattias Gaertner via Lazarus wrote:<br>
> On Tue, 24 Oct 2017 08:59:36 +0100<br>
> el es via Lazarus <<a href="mailto:lazarus@lists.lazarus-ide.org">lazarus@lists.lazarus-ide.org</a><wbr>> wrote:<br>
><br>
>> [...]<br>
>> begin<br>
>>   repeat<br>
>>   until not ThreadNowInUse;  //<br>
>><br>
>>   try<br>
>>     ThreadNowInUse :=true;<br>
><br>
> This is not thread safe.<br>
><br>
> Mattias<br>
><br>
<br>
</div>Because separated by 'try' ?<br>
<br>
I see; Will it be enough to put it like<br>
<br>
try<br>
  repeat<br>
  until not ThreadNowInUse;<br>
  ThreadNowInUse := true;<br>
<br>
...<br>
<br>
?<br></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">You should look at InterlockedCompareExchange(), everything else is an accident waiting to happen (except for a critical section, but that would be overkill on the other hand). </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I haven't ran into problems with my routine yet,<br>
but I wasn't really calling it in a very 'tight loop'<br>
<br>
(as it is used for timing/'profiling' the calls to hardware 'master node' routines<br>
 and for deciding whether the thread should go to sleep; so there is always ample time<br>
 between calls to ThreadNow() and it's only called in context of the thread; so the<br>
 'poor mans semaphore' isn't really that required - it's just a safeguard)<br>
<br>
(probably if I need timing measurements, every other type of thread I<br>
will ever define, will have their own ThreadNow call)<br>
<br>
I realize I could just use 'naked' GetSystemTime + SystemTimeToDateTime pair with a local variable;<br>
or define the above pair as a nested function in the thread, that'll serialize it enough...<br>
<br>
Anyone ever thought of a thread-safe global Now() call ?<br>
<br>
el es<br>
<div class="elided-text"><br>
--<br>
______________________________<wbr>_________________<br>
Lazarus mailing list<br>
<a href="mailto:Lazarus@lists.lazarus-ide.org">Lazarus@lists.lazarus-ide.org</a><br>
<a href="https://lists.lazarus-ide.org/listinfo/lazarus" rel="noreferrer" target="_blank">https://lists.lazarus-ide.org/<wbr>listinfo/lazarus</a><br>
</div></blockquote></div><br></div></div></div>