[Newbies] Acquiring lock, releasing in callback

Sebastian Nozzi sebnozzi at gmail.com
Fri Nov 2 22:15:54 UTC 2012


Another great example. Thank you very much!

I had to evaluate the whole thing inside of a [ ... ] fork, in order to see
the updates in the Transcript...

2012/11/2 David T. Lewis <lewis at mail.msen.com>

> On Fri, Nov 02, 2012 at 07:40:08PM +0100, Bert Freudenberg wrote:
> > On 2012-11-02, at 19:24, Sebastian Nozzi <sebnozzi at gmail.com> wrote:
> >
> > > Thanks!
> > >
> > > Didn't know it was so simple... I was kind of intimidated by "wait".
> Thought, well, that it suspended the thread no matter what.
> > >
> > > Another question, out of curiosity:
> > >
> > > Is it possible to have one thread wait for 2 other threads to finish?
> Would it also be solved with Semaphores like this?
> > >
> > > s1 := Semaphore forMutualExclusion.
> > > s2 := Semaphore forMutualExclusion.
> > > [ s1 wait. do stuff .... s1 signal] fork.
> > > [ s2 wait. do stuff ..... s2 signal ] fork.
> > >
> > > s1 wait.
> > > s2 wait.
> > > "Here we are sure the two other processes finished, kind of..."
> > >
> > > Or is there a more "friendly" way? :-)
> > >
> > > Thanks again!
> > >
> > > Sebastian
> >
> > Looks okay to me. But you could make it a bit simpler:
> >
> > s1 := Semaphore new.
> > s2 := Semaphore new.
> > [ do stuff .... s1 signal] fork.
> > [ do stuff ..... s2 signal] fork.
> > s1 wait.
> > s2 wait.
> >
> > Or even:
> >
> > s1 := Semaphore new.
> > [ do stuff .... s1 signal] fork.
> > [ do stuff ..... s1 signal] fork.
> > s1 wait; wait.
> >
>
> And you can see how this works by writing a few things to the transcript.
> Try evaluating this in a workspace:
>
>    Transcript clear.
>    sema := Semaphore new.
>    arrayOfFourProcesses := {
>         [(Delay forSeconds: 8) wait. sema signal] fork.
>         [(Delay forSeconds: 2) wait. sema signal] fork.
>         [(Delay forSeconds: 6) wait. sema signal] fork.
>         [(Delay forSeconds: 4) wait. sema signal] fork
>    }.
>    (Delay forMilliseconds: 100) wait. "allow the processes to start"
>
>    Transcript cr; show: DateAndTime now asString.
>    arrayOfFourProcesses do: [:e | Transcript cr; show: e printString].
>
>    sema wait.
>    Transcript cr; cr; show: DateAndTime now asString, ' one process just
> finished'.
>    arrayOfFourProcesses do: [:e | Transcript cr; show: e printString].
>
>    sema wait.
>    Transcript cr; cr; show: DateAndTime now asString, ' another process
> just finished'.
>    arrayOfFourProcesses do: [:e | Transcript cr; show: e printString].
>
>    sema wait.
>    Transcript cr; cr; show: DateAndTime now asString, ' and another
> process just finished'.
>    arrayOfFourProcesses do: [:e | Transcript cr; show: e printString].
>
>    sema wait.
>    Transcript cr; cr; show: DateAndTime now asString, ' the last process
> just finished'.
>    arrayOfFourProcesses do: [:e | Transcript cr; show: e printString].
>
> Dave
>
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/beginners/attachments/20121102/f01a9a0b/attachment-0001.htm


More information about the Beginners mailing list