Tôi đang cố gắng hiểu các khái niệm cơ bản về luồng và đồng thời. Tôi muốn một trường hợp đơn giản, nơi hai chủ đề liên tục cố gắng truy cập vào một tài nguyên được chia sẻ.Threading Python. Làm thế nào để khóa một sợi?
Mã:
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()
Vì vậy, tôi có hai đề, cả hai cố gắng để tăng bộ đếm. Tôi nghĩ rằng nếu chuỗi 'A' được gọi là incre()
, thì lock
sẽ được thiết lập, ngăn không cho 'B' truy cập cho đến khi 'A' được phát hành.
Chạy để làm rõ rằng đây không phải là trường hợp. Bạn nhận được tất cả các số liệu ngẫu nhiên của cuộc đua.
Đối tượng khóa được sử dụng chính xác như thế nào?
Chỉnh sửa, Ngoài ra, tôi đã thử đặt các khóa bên trong các chức năng của chuỗi, nhưng vẫn không có may mắn.
Mã của bạn không chạy. –
@Ignacio Vazquez-Abrams - Hiện tại. Tôi đã bỏ qua bit 'if __name__'. Đó là những gì bạn đang đề cập đến? – Zack
Nó cũng không chạy cho tôi. Tôi sẽ mong đợi tạo thread của bạn trông giống như: 'hello = threading.Thread (target = hello_there)' và sau đó cho thread được bắt đầu 'hello.start()'. –