我试图了解线程和并发的基础知识。我想要一个简单的案例,两个线程反复尝试访问一个共享资源。
编码:
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()
所以,我有两个线程,都试图增加计数器。我认为如果调用线程'A' increment()
,lock
就会建立,阻止'B'访问,直到'A'释放。
运行 可以清楚地表明情况并非如此。您将获得所有随机数据竞赛增量。
锁定对象究竟是如何使用的?
此外,我尝试将锁放在线程函数中,但仍然没有运气。