多线程 -- 同步锁

Posted dongmengze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程 -- 同步锁相关的知识,希望对你有一定的参考价值。

  • 多个线程同时操作一个变量
import time
import threading

def addNum():
    #在每个线程中都获取这个全局变量
    global num

    temp = num
    time.sleep(0.1)
    #对此公共变量进行-1操作
    num = temp-1

#设定一个共享变量
num = 100
thread_list = []
for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    thread_list.append(t)

#等待所有线程执行完毕
for t in thread_list:
    t.join()

print(‘final num:‘, num )

输出:
99

 技术分享图片

 

  • 同步锁,acquire和release之间的代码,在同一时间只会被一个线程执行
import time
import threading

def addNum():
    global num

    lock.acquire()
    temp = num
    time.sleep(0.1)
    num = temp-1
    lock.release()

num = 100
thread_list = []
lock = threading.Lock()

for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    thread_list.append(t)

for t in thread_list:
    t.join()

print(‘final num:‘, num )

输出:
0

 

以上是关于多线程 -- 同步锁的主要内容,如果未能解决你的问题,请参考以下文章

多线程基础

多线程的同步

多线程 共享资源 同步锁 java

多线程安全----同步锁(互斥锁)

Java多线程——Lock&Condition

python多线程编程—同步原语入门(锁Lock信号量(Bounded)Semaphore)