This raise the following question : Is a field variable in a class aligned
in memory ? (OnMyEvent variable is just a field variable).

--
[EMAIL PROTECTED]
http://www.overbyte.be

----- Original Message ----- 
From: "Arno Garrels" <[EMAIL PROTECTED]>
To: "ICS support mailing" <twsocket@elists.org>
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" <twsocket@elists.org>
> > 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

Reply via email to