More Delay/Semaphore "fun"
Andreas Raab
andreas.raab at gmx.de
Fri Oct 5 16:54:13 UTC 2007
Excellent, thank you! I've been wanting an example which makes this
problem happen reliably for a while now. I'll look at it.
Cheers,
- Andreas
Simon Kirk wrote:
> Hi all. We've been playing with Semaphores and Delays recently, as we
> were having some problems with said issues. We tried installing Andreas'
> fixes, but if we do, the code below yields some strange results when
> evaluated in a workspace:
>
>
> s _ Semaphore forMutualExclusion.
> i _ 1.
>
> "Loop while there's not too many signals on the semaphore (should be 0
> or 1)"
> [(s instVarNamed: #excessSignals) < 2] whileTrue: [
>
> "Fork two processes to do things inside the semaphore"
> p _ [[true] whileTrue: [s critical: [(Delay forMilliseconds: 10) wait]]]
> forkNamed: 'p', i printString.
>
> q _ [[true] whileTrue: [s critical: [(Delay forMilliseconds: 10) wait]]]
> forkNamed: 'q', i printString.
>
> "Increment the counter just to make it easy to ID the processes"
> i _ i + 1.
>
> "Delay to give the processes a chance to resume and potentially get into
> the critical on the Semaphore"
> (Delay forMilliseconds: 500 atRandom) wait.
> p terminate.
> (Delay forMilliseconds: 500 atRandom) wait.
> q terminate.
>
> "After terminating the two processes, the excess signals should be 1 on
> the Semaphore because
> nothing is in critical any more, assuming the processes terminated
> properly and the unwind happened
> as it should, but... "
>
> "In our images with Andreas' recent Delay and Semaphore fixes, we always
> get one of these two
> error conditions (although normally too many signals). This would cause
> deadlock in 'real world' situations"
> (s instVarNamed: #excessSignals) = 0 ifTrue: [
> WorldState addDeferredUIMessage: [self inform: 'Too few signals
> after ', i printString, ' loops']]].
> self inform: 'Too many signals after ', i printString, ' loops'.
>
>
> Don't know if we've done something wrong here, but if not I hope it may
> give cleverer people than me some more pointers to the root of the whole
> Semaphore problem :)
>
> S
>
>
> Pinesoft Computers are registered in England, Registered number:
> 2914825. Registered office: 266-268 High Street, Waltham Cross, Herts,
> EN8 7EA
>
>
>
> This message has been scanned for viruses by BlackSpider MailControl -
> www.blackspider.com
>
>
>
More information about the Squeak-dev
mailing list
|