python原子变量_通俗易懂:说说 Python 里的线程安全、原子操作

本文介绍了在并发编程中确保线程安全的重要性,通过示例解释了线程不安全的情况,例如自增操作在多线程环境下的问题。讨论了原子操作的概念,并提供了Python中的一些原子操作示例。此外,还探讨了如何通过锁实现人工原子操作以确保线程安全,并指出Queue在Python中的线程安全性源于其内置的锁原语机制。
摘要由CSDN通过智能技术生成

在并发编程时,如果多个线程访问同一资源,我们需要保证访问的时候不会产生冲突,数据修改不会发生错误,这就是我们常说的 线程安全 。

那什么情况下,访问数据时是安全的?什么情况下,访问数据是不安全的?如何知道你的代码是否线程安全?要如何访问数据才能保证数据的安全?

本篇文章会一一回答你的问题。

1. 线程不安全是怎样的?

要搞清楚什么是线程安全,就要先了解线程不安全是什么样的。

比如下面这段代码,开启两个线程,对全局变量 number 各自增 10万次,每次自增 1。

from threading import Thread, Lock

number = 0

def target():

global number

for _ in range(1000000):

number += 1

thread_01 = Thread(target=target)

thread_02 = Thread(target=target)

thread_01.start()

thread_02.start()

thread_01.join()

thread_02.join()

print(number)

正常我们的预期输出结果,一个线程自增100万,两个线程就自增 200 万嘛,输出肯定为 2000000 。

可事实却并不是你想的那样,不管你运行多少次,每次输出的结果都会不一样,而这些输出结果都有一个特点是,都

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值