[squeak-dev] Problem with fork

Igor Stasenko siguctua at gmail.com
Wed Jul 1 17:22:17 UTC 2009


2009/7/1 Mariano Martinez Peck <marianopeck at gmail.com>:
> Hi folks! I am doing some benchmarks and I having problems with fork (I
> think).
>
> I have this method collect:
>
> collect
> |semaphores tr|
> semaphores := Array new: 10.
> tr := ThreadSafeTranscript new.
> tr open.
> 1 to: 10 do: [ :index | semaphores at: index put: Semaphore
> forMutualExclusion ].
>
>     1 to: 10 do: [:i |
>         [
>         tr show: 'one fork'; cr.
>         (semaphores at: i) signal.
>         ] fork
>     ].
>
>     semaphores do: [:each | each wait ].
>     tr show: 'all forks proccesed'; cr.
>
>
> What I want is that the method collect returns when ALL of the forks created
> inside, are finished. Obviously in my real code, I don't do a transcript
> show: but another thing.
>
> I would expect something like this:
>
> one fork
> one fork
> one fork
> one fork
> one fork
> one fork
> one fork
> one fork
> one fork
> one fork
> all forks proccesed
>
> But the output is:
>
>
> all forks proccesed
> one fork
> one fork
> one fork
> one forkone fork
> one fork
> one fork
> one forkone fork
> one fork
> one fork
> one forkone fork
>
> So, I guess it isn't working :(   I don't know too much about forks so any
> help is welcome!
>
> can be a problem with  ThreadSafeTranscript  ? If so, how could I test if my
> code is working as expected ?
>

Mariano, sorry it way my mistake. In example that i gave you on IRC ,
i put Semaphore forMutualExclusion,
while obviously it should be simply: Semaphore new.



> Thanks,
>
> Mariano
>
>
>
>
>



-- 
Best regards,
Igor Stasenko AKA sig.



More information about the Squeak-dev mailing list