python 并发编程 多线程 互斥锁

 

互斥锁 并行变成串行,牺牲效率 保证数据安全,实现局部串行

保护不同的数据,应该加不同的锁

 

现在一个进程 可以有多个线程 所有线程都共享进程的地址空间 实现数据共享

共享带来问题就会出现竞争 竞争就会出现改乱数据

 

 

每个子线程都去执行task函数 代码 都拿到n=99 
这种方法效率高 ,但是导致数据不安全
并发执行
from threading import Thread
import time

n = 100

def task():
    # 定义全局变量
    global n
    tmp = n
    time.sleep(0.5)
    n = tmp - 1

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

    for t in t_list:
        t.join()

    print("主线程", n)

    '''
    每个子线程都去执行task函数 代码 都拿到n=99 
    这种方法效率高 但是导致数据不安全
    并发执行
    '''
    
'''
主线程 99
'''

 

加上互斥锁 牺牲效率 保证数据安全

通过把并发变成串行

from threading import Thread, Lock
import time

n = 100

def task(mitex):

    # 定义全局变量
    global n

    mitex.acquire()
    tmp = n
    time.sleep(0.1)
    n = tmp - 1
    mitex.release()

if __name__ == "__main__":
    mitex= Lock()
    t_list = []
    for i in range(100):
        t = Thread(target=task, args=(mitex,))
        t_list.append(t)
        t.start()

    for t in t_list:
        t.join()

    print("主线程", n)

# 主线程 0

 

posted @ 2019-06-21 01:18  minger_lcm  阅读(274)  评论(0编辑  收藏  举报