[fpc-devel] new TMultiReadExclusiveWriteSynchronizer
Jonas Maebe
jonas.maebe at elis.ugent.be
Fri Aug 28 14:55:02 CEST 2009
On 28 Aug 2009, at 14:43, Graeme Geldenhuys wrote:
> Graeme Geldenhuys wrote:
>>
>> As I mentioned in the fpc-pascal mailing list. The current
>> implementation is wrong and is actually the equivalent of Delphi's
>> TSimpleRWSync class.
>
> Regarding Florian's comment in the bug tracker. I was using Sleep(100)
> which Florian says will slow down the class a lot.
>
> Has anybody got a better solution to this? I guess dropping the Sleep
> time even lower might not be the best solution either.
It would make things worse on some platforms, because with very low
sleep times you don't even get a context switch on Mac OS X (the
routine just spins in user space for a short while).
> Any suggestions?
Add a flag that indicates that someone is interested in writing, block
it on an rtlevent, and then
a) block new readers on some kind of barrier
b) when all current readers are finished, send the event to wake up
the writer
c) when the writer is finished, wake up the readers by upping the
semaphore
d) if other writers arrived in the mean time, they'll contend with the
readers over the critical section
Of course, there is at least one small problem with the above
scenario, and that is that the thread manager does not implement
semaphores on all platforms (wich would be quite helpful to implement
the barrier).
I'd suggest to implement it in a platform-dependent way and use the
primitives offered by the standard libraries of every platform. It's
not like this causes an extra dependency, so why re-implement (and
debug) the whole thing in a generic and probably sub-optimal way?
Jonas
More information about the fpc-devel
mailing list