🐍

1114. Print in Order

2023/01/24に公開約800字

説明

問題

全てが間違っているかもしれない説明です。

ざっくり回答コード
https://github.com/Runacy/public-anything/blob/main/algorythm/print_in_order.py

デバッグしたかったのでprintしています。
参考にする時は、printをぬいてね。

さて、これを実行すると、次のような順序で実行されます。

1
2
3
4
5
8
11
6
7
8
9
10
12
13

1~4

def __init__(self):の中を同期的に進みます。
self.locks[0].acquire()でlockを取得します。

5,8,11

各メソッドが呼ばれます。
この問題的にこのメソッドは並列で動いています。

6~10,12,13

6が呼ばれたときに、printFirst()が呼ばれます。
その後ロック(self.locks[0].release())を解放します。
ここで、self.locks[0]を解法したので、次with句で指定しているところで使用できます。
ここでprintSecond()が呼ばれた後で、同様にロックを解法して次のwith句が取得します。
このようにロックを解法する形で順番に呼ばれていき、最後にprintThird()が呼ばれます。

参考

Discussion

ログインするとコメントできます