Francois Piette wrote:
> This raise the following question : Is a field variable in a class
> aligned in memory ? (OnMyEvent variable is just a field variable).
I don't know, and it also raises a second question:
> Reads and writes to variables of
> other sizes are not guaranteed to be atomic on any platform."
Are i.e. reads/writes of Byte-variables not atomic in any Windows
version, and if yes what versions are they? If that was true for
32-Bit Win I would have to change plenty of code :(
---
Arno Garrels [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
> --
> [EMAIL PROTECTED]
> http://www.overbyte.be
>
> - Original Message -
> From: "Arno Garrels" <[EMAIL PROTECTED]>
> To: "ICS support mailing"
> Sent: Monday, August 07, 2006 11:27 AM
> Subject: Re: [twsocket] Interesting
> multithreadingissue:raceconditionwhentriggering an event handler
>
>
>> Francois Piette wrote:
This requires atomic reading/writing of a Pointer (no thread switch
while read/write), I'm not sure whether this is true.
>>>
>>> I think so since pointer are 32 bits and are accessed by only one
>>> memory cycle. If you look at the Windows API InterlockedXYZ
>>> function, there is none to access a single 32 bit value. So I guess
>>> it is guaranteed to have a 32 bit access done in one chunk.
>>
>> In order to clear myself up finally I goggled a bit and found this:
>>
>> http://windowssdk.msdn.microsoft.com/en-us/library/ms684122.aspx
>>
>> "Simple reads and writes to properly-aligned 32-bit variables are
>> atomic.
> In other words, when one thread is updating a 32-bit variable, you
> will not end up with only one portion of the variable updated; all 32
> bits are updated in an atomic fashion. However, access is not
> guaranteed to be synchronized. If two threads are reading and writing
> from the same variable, you cannot determine if one thread will
> perform its read operation before the other performs its write
> operation.
>> Simple reads and writes to properly aligned 64-bit variables are
>> atomic on
> 64-bit Windows. Reads and writes to 64-bit values are not guaranteed
> to be atomic on 32-bit Windows. Reads and writes to variables of
> other sizes are not guaranteed to be atomic on any platform."
>>
>> But is this also true for Unix OS? Some articles I found say that
>> atomicity is garanteed up to native int only.
>>
>> ---
>> Arno Garrels [TeamICS]
>> http://www.overbyte.be/eng/overbyte/teamics.html
>>
>>
>>>
>>> Contribute to the SSL Effort. Visit
>>> http://www.overbyte.be/eng/ssl.html --
>>> [EMAIL PROTECTED]
>>> Author of ICS (Internet Component Suite, freeware)
>>> Author of MidWare (Multi-tier framework, freeware)
>>> http://www.overbyte.be
>>>
>>>
>>> - Original Message -
>>> From: "Arno Garrels" <[EMAIL PROTECTED]>
>>> To: "ICS support mailing"
>>> Sent: Monday, August 07, 2006 9:35 AM
>>> Subject: Re: [twsocket] Interesting multithreading issue:
>>> raceconditionwhentriggering an event handler
>>>
>>>
Arno Garrels wrote:
> Francois PIETTE wrote:
>> I've found an interesting multithreading issue which is related
>> not The solution is to rewrite the procedure as follow:
>>
>> Line1: procedure TMyComponent.TriggerMyEvent(MyArg : Integer);
>> Line2: var
>> Line3: TMyEventProc EventProc;
>> Line4: begin
>> Line5: EventProc := OnMyEvent;
>> Line6: if Assigned(EventProc) then
>> Line7: EventProc(Self, MyArg);
>> Line8: end;
>> Saving the event pointer in line5 make sure that it is still
>> valid in the case a thread switch between Line 6 and 7 occur and
>> the OnMyEvent is set to nil by the other thread.
>>
>> Interesting, isn't it ?
>
> I think it's better/faster than having critical sections for all
> triggers, do you plan to change all ICS triggers accordingly?
This requires atomic reading/writing of a Pointer (no thread switch
while read/write), I'm not sure whether this is true. Byte
variables are written/read in one go, there's no ploblem.
---
Arno Garrels [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
>> --
>> To unsubscribe or change your settings for TWSocket mailing list
>> please goto http://www.elists.org/mailman/listinfo/twsocket
>> Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be