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