threading.lock强制线程按顺序运行?

时间:2019-03-23 22:17:17

标签: python-3.x multithreading race-condition locks

我的虚拟脚本使用两个函数,一个函数加1,一个函数减1。 我试图与线程异步地运行每个函数1000000次,并使用锁来防止竞争情况。

但是,我注意到for loop本身使用锁时, 相同的线程将一直运行到循环结束为止,这使我相信线程正在同步运行。

这是我的脚本的样子:

master_count = 0
trials = 1000
import threading

def add_count():
    global master_count
    for i in range(trials):
        with lock:
            print(threading.current_thread().getName())
            master_count += 1



def subtract_count():
    global master_count
    for i in range(trials):
        with lock:
            print(threading.current_thread().getName())

            master_count -= 1



lock = threading.Lock()

t1 = threading.Thread(target = add_count, name = 'add1' )
t2 = threading.Thread(target = add_count, name = 'add2' )
t3 = threading.Thread(target = subtract_count, name = 'subtract1' )
t4 = threading.Thread(target = subtract_count, name = 'subtract2' )

t1.start()
t2.start()
t3.start()
t4.start()


t4.join()
t2.join()
t3.join()
t1.join()

print(master_count)

我看到此输出到python shell(10个试用版):

add1
add1
add1
add1
add1
add1
add1
add1
add1
add1
add2
add2
add2
add2
add2
add2
add2
add2
add2
add2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1

我可以想象,如果脚本正在异步运行,我会看到线程名的混合,而不是这个有序的输出。

我也尝试在While循环中执行此操作,但是我遇到了同样的问题。

实际上是同步运行吗?如果是这样,我如何使其与锁异步运行。

谢谢。

0 个答案:

没有答案