On Sat, Feb 11, 2023 at 12:53 PM Rony G. Flatscher <rony.flatsc...@wu.ac.at>
wrote:

> On 11.02.2023 18:16, Rick McGuire wrote:
>
> Some comments:
>
> 1) the T and A columns are a bit redundant. We really only need a single
> identifier for the thread, having two is just extra clutter.
> 2) The term activity is introduced here without explanation. It doesn't
> really appear any other place in the documentation and is really more of an
> internal concept than part of the language. If it is used here, then this
> needs to be used consistently in all other places that concurrency is
> discussed.
> 3) The variable pool term is a bit misleading. The thing that gets locked
> is the object's variable pool for a particular scope, not all of the
> variables for the object. For example, two different threads might have the
> GUARD lock on the same object at different scope levels. Knowing the scope
> would be a very useful piece of information.
> 4) I don't like the use of the term "lock" here. At least refer to them as
> a GUARD lock, since that is the concept that is used in other places.
> 5) I still don't like the M prefix. I think things would just be simpler
> if multi-thread mode is used any time there are multiple active threads.
>
> Thank you for the feedback!
>
> A question ad 5): what about using M as a postfix (AM, RM, IM: on, A, R,
> I: off)?
>
I am opposed to any alphabetic marker at all, prefix or suffix. My
recommendation is to make the extra information available whenever it makes
sense (i.e., there's more than one active thread. The user shouldn't have
to adjust things because suddenly things are happening on separate threads.

Rick




> ad 1): indeed in the used example it looks redundant; maybe a different
> example would show both to be benefitial as there may be different
> activities on the same thread, but also a single activity on different
> threads. E.g. example_12_5.rex:
>

This sentence makes no sense to me at all. There will never be multiple
activities active on the same thread at the same time, and an a single
activity will never be active on different threads.

> /* Example of sending message to SELF */
> object1 = .example~new
> object2 = .example~new
> say object1~repeater(5, "Object 1 running")
> say object2~repeater(5, "Object 2 running")
> say "Main ended."
>
> ::class example
> ::method repeater
>    use arg reps,msg
>    reply "Entered repeater."
>    say self~repeat(reps,msg)
>
> ::method repeat
>    use arg reps,msg
>    do reps
>       say msg
>    end
>    return "Repeated" msg"," reps "times."
>
> ::options trace a
>
> ------------------------
> R1   T1   A1                    2 *-* object1 = .example~new
> R1   T1   A1                    3 *-* object2 = .example~new
> R1   T1   A1                    4 *-* say object1~repeater(5, "Object 1 
> running")
> R1   T1   A2    V1                >I> Method "REPEATER" with scope "EXAMPLE" 
> in package "G:\oorexx.tmp\concurrencyTrace\example_12_5.rex".
> R1   T1   A2    V1      1*     10 *-* use arg reps,msg
> R1   T1   A2    V1      1*     11 *-* reply "Entered repeater."
> Entered repeater.
> R1   T1   A1                    5 *-* say object2~repeater(5, "Object 2 
> running")*R1   T2   A2    V1      1*        >I> Method "REPEATER" with scope 
> "EXAMPLE" in package "G:\oorexx.tmp\concurrencyTrace\example_12_5.rex".*
> R1   T1   A3    V2                >I> Method "REPEATER" with scope "EXAMPLE" 
> in package "G:\oorexx.tmp\concurrencyTrace\example_12_5.rex".*R1   T2   A2    
> V1      1*     12 *-* say self~repeat(reps,msg)*
> R1   T1   A3    V2      1*     10 *-* use arg reps,msg*R1   T2   A4    V1     
>  1         >I> Method "REPEAT" with scope "EXAMPLE" in package 
> "G:\oorexx.tmp\concurrencyTrace\example_12_5.rex".*
> R1   T1   A3    V2      1*     11 *-* reply "Entered repeater."*R1   T2   A4  
>   V1      2*     15 *-* use arg reps,msg*Entered repeater.*R1   T2   A4    V1 
>      2*     16 *-* do reps*R1   T1   A1                    6 *-* say "Main 
> ended."
> Main ended.*R1   T3   A3    V2      1*        >I> Method "REPEATER" with 
> scope "EXAMPLE" in package 
> "G:\oorexx.tmp\concurrencyTrace\example_12_5.rex".**R1   T2   A4    V1      
> 2*     17 *-*   say msg*Object 1 running*R1   T3   A3    V2      1*     12 
> *-* say self~repeat(reps,msg)**R1   T2   A4    V1      2*     18 *-* end**R1  
>  T3   A5    V2      1         >I> Method "REPEAT" with scope "EXAMPLE" in 
> package "G:\oorexx.tmp\concurrencyTrace\example_12_5.rex".**R1   T2   A4    
> V1      2*     16 *-* do reps**R1   T3   A5    V2      2*     15 *-* use arg 
> reps,msg**R1   T2   A4    V1      2*     17 *-*   say msg*Object 1 running*R1 
>   T3   A5    V2      2*     16 *-* do reps**R1   T2   A4    V1      2*     18 
> *-* end**R1   T3   A5    V2      2*     17 *-*   say msg*
> Object 2 running*R1   T2   A4    V1      2*     16 *-* do reps**R1   T3   A5  
>   V2      2*     18 *-* end**R1   T2   A4    V1      2*     17 *-*   say 
> msg*Object 1 running*R1   T3   A5    V2      2*     16 *-* do reps**R1   T2   
> A4    V1      2*     18 *-* end**R1   T3   A5    V2      2*     17 *-*   say 
> msg*
> Object 2 running*R1   T2   A4    V1      2*     16 *-* do reps**R1   T3   A5  
>   V2      2*     18 *-* end**R1   T2   A4    V1      2*     17 *-*   say 
> msg*Object 1 running*R1   T3   A5    V2      2*     16 *-* do reps**R1   T2   
> A4    V1      2*     18 *-* end**R1   T3   A5    V2      2*     17 *-*   say 
> msg*
> Object 2 running*R1   T2   A4    V1      2*     16 *-* do reps**R1   T3   A5  
>   V2      2*     18 *-* end**R1   T2   A4    V1      2*     17 *-*   say 
> msg*Object 1 running*R1   T3   A5    V2      2*     16 *-* do reps**R1   T2   
> A4    V1      2*     18 *-* end**R1   T3   A5    V2      2*     17 *-*   say 
> msg*
> Object 2 running*R1   T2   A4    V1      2*     16 *-* do reps**R1   T3   A5  
>   V2      2*     18 *-* end**R1   T2   A4    V1      2*     19 *-* return 
> "Repeated" msg"," reps "times."*Repeated Object 1 running, 5 times.*R1   T3   
> A5    V2      2*     16 *-* do reps**R1   T3   A5    V2      2*     17 *-*   
> say msg*
> Object 2 running*R1   T3   A5    V2      2*     18 *-* end**R1   T3   A5    
> V2      2*     16 *-* do reps**R1   T3   A5    V2      2*     19 *-* return 
> "Repeated" msg"," reps "times."*
> Repeated Object 2 running, 5 times.
> ------------------------
>
> So in T1 three actvities get executed (A1, A2, A3), in T2 A2 and A4, in T3
> A3 and A5. One can see in T1 for how long A2 and A3 get executed there and
> where they switched to T2 and T3 and which activities got invoked on them.
>
> ---rony
>
>
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
>
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to