互斥锁
进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理。
注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全
那么也就是说当多个线程几乎同时修改一个共享数据的时候,需要进行同步控制,线程同步能够保证多个 线程安全的访问竞争资源(全局内容),最简单的同步机制就是使用互斥锁。 某个线程要更改共享数据时,先将其锁定,此时资源的状态为锁定状态,其他线程就能更 改,直到该线程将资源状态改为非锁定状态,也就是释放资源,其他的线程才能再次锁定资 源。互斥锁保证了每一次只有一个线程进入写入操作。从而保证了多线程下数据的安全性。
死锁
我献给大家介绍一些死锁:在多个线程共享资源的时候,如果两个线程分别占有一部分资源,并且同时等待对方的资 源,就会造成死锁现象。
我给大家举一个比较搞笑的例子
两情侣之间吵得不可开交你不让我我不让你,那么要是双方都不开口,那么双方是不是就是一直等待着
那我带大家来看一下死锁是怎样的结构:
from threading import Lock
from threading import Thread
lock1=Lock()
lock2=Lock()
def work1(num):
lock1.acquire()#lock1上锁
print("in work1")
lock2.acquire()#lock2上锁
print("work1---")
lock2.release()#lock2解锁
lock1.release()#lock1解锁
def work2(num):
lock2.acquire()#lock2加锁
print("in work")
lock2.acquire()#lock2加锁
print("work---")
lock1.release()#lock1解锁
lock1.release()#lock2解锁
if __name__ == '__main__':
t1=Thread(target=work1,args=(1000000,))
t2=Thread(target=work2,args=(1000000,))
t1.start()
t2.start()
行了,概念代码也都介绍了,小的就告退啦,祝大家每天开开心心,嘻嘻嘻
来源:CSDN
作者:一个可爱的程序猴
链接:https://blog.csdn.net/blackdevil_/article/details/104283686