同步锁作用: 在我当前包含(lock.acquire() 和 lock.release()之间 )的代码没有执行完成,不进行线程切换,必须等我执行完了,下一个线程才能继续执行(为什么要用同步锁,假如我们同时在操作一个数据的时候,比如数字100,10个线程同时操作他减1的时候,每个线程减10次,我们想要拿到结果为0,这时候没锁的情况下;得到的结果会不准确) #-*-conding:utf-8-*-
import threading
import time lock = threading.Lock() #创建同步锁对象
n = 100
def add():
global n
lock.acquire() #加上锁
temp = n
time.sleep(0.01)
n = temp - 1
lock.release() #释放锁 l = []
for i in range(100):
t = threading.Thread(target=add)
t.start()
l.append(t) for r in l:
r.join()
print(n)
相关文章
- MySQL_写锁_lock tables tableName write
- Java中线程同步锁和互斥锁有啥区别?看完你还是一脸懵逼?
- Java并发编程实战 03互斥锁 解决原子性问题
- 【Java并发编程】2、无锁编程:lock-free原理;CAS;ABA问题
- JUC——线程同步锁(ReentrantLock)
- Java线程(四):JUC包线程互斥与同步以及读写锁
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- 线程互斥和同步-- 互斥锁
- Java之JUC系列(03)--互斥锁ReentrantLock
- Java多线程-线程的同步与锁