Pythonでセマフォ。
import threading import time def do_thread(semaphore, id): with semaphore: for i in range(5): print('start', id, i) time.sleep(1) if __name__ == '__main__': # セマフォの数は2 sem = threading.Semaphore(2) t1 = threading.Thread(target=do_thread, args=(sem, 'A')) t2 = threading.Thread(target=do_thread, args=(sem, 'B')) t3 = threading.Thread(target=do_thread, args=(sem, 'C')) t1.start() t2.start() t3.start()
スレッドの同時実行数はセマフォの数となる。
2つのスレッドA、Bの処理が終わるまでスレッドCは待たされる。
$ python semtest1.py start A 0 start B 0 start A 1 start B 1 start B 2 start A 2 start B 3 start A 3 start B 4 start A 4 start C 0 start C 1 start C 2 start C 3 start C 4