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