线程互斥锁

线程互斥锁:降低效率,保证数据安全
线程:数据共享
修改共享数据,数据不安全
from threading import Thread,Lock
import time

n=100
def task():
    global n
    temp=n
    time.sleep(0.1)
    n=temp-1

if __name__ == '__main__':
    t_l=[]
    for i in range(100):
        t=Thread(target=task)
        t_l.append(t)
        t.start()

    for t in t_l:
        t.join()
    print(n)
结果:
99
正确结果应该是0
举例

解决办法加锁

from threading import Thread,Lock
import time

mutex=Lock()
n=100
def task():
    global n
    mutex.acquire()
    temp=n
    time.sleep(0.1)
    n=temp-1
    mutex.release()

if __name__ == '__main__':
    t_l=[]
    for i in range(100):
        t=Thread(target=task)
        t_l.append(t)
        t.start()

    for t in t_l:
        t.join()
    print(n)
结果:
0
虽然运行效率变低了,但是数据安全了
互斥锁

 

posted @ 2019-07-22 09:21  zhouhao666  阅读(76)  评论(0编辑  收藏  举报