[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