スレッド化と並行性の基本を理解しようとしています。2 つのスレッドが 1 つの共有リソースに繰り返しアクセスしようとする単純なケースが必要です。
コード:
import threading
class Thread(threading.Thread):
def __init__(self, t, *args):
threading.Thread.__init__(self, target=t, args=args)
self.start()
count = 0
lock = threading.Lock()
def increment():
global count
lock.acquire()
try:
count += 1
finally:
lock.release()
def bye():
while True:
increment()
def hello_there():
while True:
increment()
def main():
hello = Thread(hello_there)
goodbye = Thread(bye)
while True:
print count
if __name__ == '__main__':
main()
したがって、2 つのスレッドがあり、どちらもカウンターをインクリメントしようとしています。increment()
スレッド「A」が を呼び出すと、lock
が確立され、「A」が解放されるまで「B」がアクセスできなくなると思いました。
を実行すると、そうではないことが明らかになります。ランダムなデータ レース風のインクリメントをすべて取得します。
ロックオブジェクトは正確にどのように使用されますか?
さらに、スレッド関数内にロックを配置しようとしましたが、まだ運がありません。