> 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.

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

Reply via email to