[fpc-pascal] Semaphore problems

Burkhard Carstens fpc at bcsoft.de
Mon Jul 24 23:48:41 CEST 2006


Am Montag, 24. Juli 2006 23:38 schrieb Vinzent Höfler:
> Vinzent Höfler wrote:
> > Hmm. So we'd need a mutex inside a mutex. Now I know why they call
> > it recursive. ;) So it'll be something like that:
> >
> > function Recursive_Mutex.Lock : ...;
> > begin
> >    // Lock mutex inside mutex.
> >    self.Owner_Check_Lock.Lock;
> >
> >    // Owned by current thread?
> >    if CurrentThreadId <> self.ThreadId then
> >    begin
> >       // Nope! Get the hell outta here.
> >       self.Owner_Check_Lock.Unlock;
> >       exit (NOT_OWNED);
> >    end {if};
> >
> >    // Now try locking the real mutex.
> >    if pthread_mutex_lock (self...) = 0 then
> >    begin
> >       self.Count := self.Count + 1;
> >       self.Owner_Check.Unlock;
> >       exit (SUCCESS);
> >    end {if};
> >
> >    self.Owner_Check.Unlock;
> >    exit (FAILURE);
> > end {Mutex.Lock};
> >
> > Something like that. Don't nail me on that, it's quite late and the
> > heat is still killing me. ;)
>
> I knew it. Of course this is wrong. We can only lock the mutex once,
> because we assume it's non-recursive, that was the whole point. So we
> should *first* check the count and then may lock/unlock the mutex
> accordingly.

yea, this stuff is allways really brain cracking ;-) .. heat kills me, 
too, so I will re-read these mails tomorrow and think about it again..
good night
 Burkhard




More information about the fpc-pascal mailing list