我想了解線程和併發的基礎知識。我想要一個簡單的例子,其中兩個線程反覆嘗試訪問一個共享資源。Python線程。我如何鎖定線程?
代碼:
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 incre():
global count
lock.acquire()
try:
count += 1
finally:
lock.release()
def bye():
while True:
incre()
def hello_there():
while True:
incre()
def main():
hello = Thread(hello_there)
goodbye = Thread(bye)
while True:
print count
if __name__ == '__main__':
main()
所以,我有兩個線程,都試圖增加計數器。我認爲如果線程'A'調用incre()
,lock
將被建立,阻止'B'訪問直到'A'發佈。
運行表明事實並非如此。您可以獲得所有隨機數據比賽增量。
鎖對象究竟是如何使用的?
編輯另外,我已經嘗試把鎖定在線程函數內,但仍然沒有運氣。
你的代碼不能運行。 –
@Ignacio Vazquez-Abrams - 現在應該。我遺漏了'if __name__'位。那是你所指的? – Zack
它也不適合我。我希望你的線程創建看起來像:'hello = threading.Thread(target = hello_there)',然後爲線程啓動'hello.start()'。 –