Mail Archives: cygwin-developers/2001/09/12/18:43:35
On Thu, 2001-09-13 at 02:56, Christopher Faylor wrote:
> On Wed, Sep 12, 2001 at 06:48:12PM +0200, Corinna Vinschen wrote:
> >On Wed, Sep 12, 2001 at 06:40:31PM +0200, Corinna Vinschen wrote:
> >> On Tue, Sep 11, 2001 at 10:00:11PM +1000, Robert Collins wrote:
> >> > + if (iswinnt)
> >> > + InitializeCriticalSection (&criticalsection);
> >> > + else
> >> > + {
> >> > + this->win32_obj_id =::CreateMutex (&sec_none_nih, false, NULL);
> >> > + if (!win32_obj_id)
> >> > + magic = 0;
> >> > + }
> >>
> >> Could somebody give me a short hint why we're using critical
> >> sections on NT only? I need some three word only description...
> >> something memorable...
> >
> >Whoops, is the fact that TryEnterCriticalSection() is only
> >available since NT4 the reason, perhaps???
>
> Apparently.
>
> Cygwin's muto class actually does a sort of critical section and has
> TryEnterCriticalSection capabilities.
>
> I don't think that mutos are necessarily general purpose enough for
> this but maybe we could do something similar. Or we could probably
> roll our own version of TryEnterCriticalSection.
There's little point unless we can allso roll our own
SignalObjectAndWait. Win95 is lacking syncronisation capabilities left
right and cetnre...
Looking at the mutos class it uses Event objects... Event objects are
cross process, and therefore subject to the same issues that force
mutex's to be slow. If your perf tests show mutos' to be faster than
mutexs I'll happily eat my words :].
Also the code there is a little arcane.
for example, the while loop on line 85 looks like it can only ever
execute once - either it jumps to gotoit, or returns 0. So why a loop
construct?
I'll look into mutos and see if I can see any unfairness or races in it.
The point being that we are currently wrapping "fair" objects, if we
roll-our-own, we run the risk of unfair scheduling being introduced over
the base fair win32 objects.
However, if someone happens across a disassembly of TryEnterCritical
section and it can be implemented in user space on win9x :]
Rob
- Raw text -