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 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal