Checkpoint synchronization: Difference between revisions
Content deleted Content added
added Perl 6 |
Python example |
||
Line 2,417: | Line 2,417: | ||
Thread #1 is done. |
Thread #1 is done. |
||
Press ENTER to exit</pre> |
Press ENTER to exit</pre> |
||
=={{header|Python}}== |
|||
<lang Python> |
|||
""" |
|||
Based on https://pymotw.com/3/threading/ |
|||
""" |
|||
import threading |
|||
import time |
|||
import random |
|||
def worker(workernum, barrier): |
|||
# task 1 |
|||
sleeptime = random.random() |
|||
print('Starting worker '+str(workernum)+" task 1, sleeptime="+str(sleeptime)) |
|||
time.sleep(sleeptime) |
|||
print('Exiting worker'+str(workernum)) |
|||
barrier.wait() |
|||
# task 2 |
|||
sleeptime = random.random() |
|||
print('Starting worker '+str(workernum)+" task 2, sleeptime="+str(sleeptime)) |
|||
time.sleep(sleeptime) |
|||
print('Exiting worker'+str(workernum)) |
|||
barrier = threading.Barrier(3) |
|||
w1 = threading.Thread(target=worker, args=((1,barrier))) |
|||
w2 = threading.Thread(target=worker, args=((2,barrier))) |
|||
w3 = threading.Thread(target=worker, args=((3,barrier))) |
|||
w1.start() |
|||
w2.start() |
|||
w3.start() |
|||
</lang> |
|||
Output: |
|||
<pre> |
|||
Starting worker 1 task 1, sleeptime=0.26685336937182835 |
|||
Starting worker 2 task 1, sleeptime=0.947511912308323 |
|||
Starting worker 3 task 1, sleeptime=0.6495569605252262 |
|||
Exiting worker1 |
|||
Exiting worker3 |
|||
Exiting worker2 |
|||
Starting worker 2 task 2, sleeptime=0.5585479798026259 |
|||
Starting worker 3 task 2, sleeptime=0.4104925281220747 |
|||
Starting worker 1 task 2, sleeptime=0.15963562165203105 |
|||
Exiting worker1 |
|||
Exiting worker3 |
|||
Exiting worker2 |
|||
</pre> |
|||
=={{header|Racket}}== |
=={{header|Racket}}== |