[M3devel] join twice?

Tony Hosking hosking at cs.purdue.edu
Mon Nov 2 18:59:36 CET 2009


I don't know that there ever was a mandate that join can only be  
called once on a given thread.  But, given that pthread_join is  
undefined when called more than once on the same thread we probably  
want to retain the comment.  (Whether the implementation actually  
prohibits it or not is an implementation decision.)  The point is that  
we should be free to give the error in some later implementation, so  
as to not to restrict what semantics the implementation must support.

Antony Hosking | Associate Professor | Computer Science | Purdue  
University
305 N. University Street | West Lafayette | IN 47907 | USA
Office +1 765 494 6001 | Mobile +1 765 427 5484




On 2 Nov 2009, at 10:11, Jay K wrote:

> Thread.i3:
>
>
> PROCEDURE Join(t: T): REFANY;
> (* Wait until "t" has terminated and return its result. It is a
>    checked runtime error to call this more than once for any "t". *)
>
>
> ThreadWin32.m3:
>
>
> PROCEDURE Join(t: T): REFANY =
>   VAR res: REFANY;
>   BEGIN
>     LOCK t DO
>       IF t.joined THEN Die(ThisLine(), "attempt to join with thread  
> twice"); END;
>       WHILE NOT t.completed DO Wait(t, t.join) END;
>       res := t.result;
>       t.result := NIL;
>       t.joined := TRUE;
>       t.join := NIL;
>     END;
>     RETURN res;
>   END Join;
>
> PROCEDURE AlertJoin(t: T): REFANY RAISES {Alerted} = similar
>
>
> ThreadPThread.m3:
>
>
> PROCEDURE Join (t: T): REFANY =
>   BEGIN
>     LOCK t DO
>       WHILE NOT t.completed DO Wait(t, t.join) END;
>     END;
>     RETURN t.result;
>   END Join;
>
> PROCEDURE AlertJoin (t: T): REFANY RAISES {Alerted} = similar
>
>
> Should we just loosen the comment and go with the simpler pthread  
> version?
> I'd like Win32 and pthread to be more similar where possible, to  
> ease maintenance.
>
>
>  - Jay

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20091102/c92b68b2/attachment-0002.html>


More information about the M3devel mailing list