代码之家  ›  专栏  ›  技术社区  ›  András Takács

Python多线程错误

  •  1
  • András Takács  · 技术社区  · 11 月前

    我是python新手,我创建了一个python脚本,该脚本使用多线程来增加共享计数器。我预计计数器的最终值将达到1000000,因为我正在执行10个线程,每个线程向计数器添加100000次。然而,结果始终低于100万。

    这是我使用的代码:

    import threading
    
    counter = 0
    
    def increment_counter():
        global counter
        for _ in range(100000):
            counter += 1
    
    threads = []
    for _ in range(10):
        thread = threading.Thread(target=increment_counter)
        threads.append(thread)
        thread.start()
    
    for thread in threads:
        thread.join()
    
    print("Final counter value:", counter)
    
    1 回复  |  直到 11 月前
        1
  •  1
  •   Michael Williams    11 月前

    问题是由于多个线程试图同时修改计数器时缺乏同步而导致的竞争情况。要解决此问题,请实现线程。锁定以确保只有一个线程可以同时增加计数器:

    import threading
    
    counter = 0
    lock = threading.Lock()
    
    def increment_counter():
        global counter
        for _ in range(100000):
            with lock:
                counter += 1
    
    threads = []
    for _ in range(10):
        thread = threading.Thread(target=increment_counter)
        threads.append(thread)
        thread.start()
    
    for thread in threads:
        thread.join()
    
    print("Final counter value:", counter)