RosettaCodeData/Task/Concurrent-computing/M2000-Interpreter/concurrent-computing.m2000

53 lines
1.7 KiB
Plaintext

Thread.Plan Concurrent
Module CheckIt {
Flush ' empty stack of values
Data "Enjoy", "Rosetta", "Code"
For i=1 to 3 {
Thread {
Print A$
Thread This Erase
} As K
Read M$
Thread K Execute Static A$=M$
Thread K Interval Random(500,1000)
Threads
}
Rem : Wait 3000 ' we can use just a wait loop, or the main.task loop
' main.task exit if all threads erased
Main.Task 30 {
}
' when module exit all threads from this module get a signal to stop.
' we can use Threads Erase to erase all threads.
' Also if we press Esc we do the same
}
CheckIt
' we can define again the module, and now we get three time each name, but not every time three same names.
' if we change to Threads.Plan Sequential we get always the three same names
' Also in concurrent plan we can use a block to ensure that statements run without other thread executed in parallel.
Module CheckIt {
Flush ' empty stack of values
Data "Enjoy", "Rosetta", "Code"
For i=1 to 3 {
Thread {
Print A$
Print A$
Print A$
Thread This Erase
} As K
Read M$
Thread K Execute Static A$=M$
Thread K Interval Random(500,530)
Threads
}
Rem : Wait 3000 ' we can use just a wait loop, or the main.task loop
' main.task exit if all threads erased
Main.Task 30 {
}
' when module exit all threads from this module get a signal to stop.
' we can use Threads Erase to erase all threads.
' Also if we press Esc we do the same
}
CheckIt