测试开发面试题:悲观锁和乐观锁

1995 篇文章 51 订阅
769 篇文章 1 订阅

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读3k次,点赞86次,收藏13次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502

什么是悲观锁

悲观锁:假设并发冲突的概率很高,因此在读取数据时会加锁,以防止其他线程修改数据。只有当自己获得了锁之后才能对数据进行操作,操作完成后释放锁。

什么是乐观锁

乐观锁:假设并发冲突的概率很低,因此在读取数据时不加锁,而是在更新数据时检查数据是否被其他线程修改过。如果数据没有被修改,则更新成功;如果数据已经被修改,则放弃当前操作或者重试。

什么是原子操作

原子操作是指一个不可分割的操作,要么完全执行,要么根本不执行。这意味着在原子操作执行期间,其他线程无法访问或修改受影响的内存位置。

什么是CAS

CAS (Compare-And-Swap)

CAS 是一种原子操作,用于更新内存中的值,它执行以下操作:

比较:将当前内存值与预期的值进行比较。

交换:如果当前值与预期值相等,则将新值写入内存。

否则:不进行任何操作,并返回当前值。

CAS 的优点

CAS 是一种实现无锁并发数据结构的有效方法,因为它:

  • 避免了锁:CAS 不需要使用锁,从而提高了性能和可伸缩性。

  • 确保了数据一致性:CAS 保证了并发更新的正确性和原子性。

  • 简单易用:CAS 的 API 通常很简单,易于理解和使用。

悲观锁的python实践实例

import threading

# 创建一个锁对象
lock = threading.Lock()

# 共享数据
count = 0

def pessimistic_lock():
    global count

    # 获取锁
    with lock:
        # 执行操作
        temp = count
        temp += 1
        count = temp
        print(f"Pessimistic Lock: Count is {count}")

# 创建多个线程
threads = []
for _ in range(10):
    t = threading.Thread(target=pessimistic_lock)
    threads.append(t)
    t.start()

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

print(f"Final count: {count}")

在这个例子中,我们使用threading.Lock()创建一个锁对象,然后在需要访问共享数据count的时候,使用with lock:获取锁,执行操作后释放锁。这样可以确保每次只有一个线程能够访问共享数据,避免了并发访问导致的问题。

乐观锁的例子:未使用原子操作的cas

import threading
# 共享数据
count = 0
def optimistic_lock():
    global count
    # 读取共享数据
    local_count = count
    # 执行操作
    local_count += 1
    # 检查数据是否被修改
    if count == local_count - 1:
        count = local_count
        print(f"Optimistic Lock: Count is {count}")
    else:
        print("Data has been modified by other threads, retry or abort.")

# 创建多个线程
threads = []
for _ in range(10):
    t = threading.Thread(target=optimistic_lock)
    threads.append(t)
    t.start()
# 等待所有线程执行完毕
for t in threads:
    t.join()
print(f"Final count: {count}")

在这个例子中,我们没有使用锁,而是在更新共享数据count的时候,先读取当前值到local_count中,执行操作后,再检查count是否被其他线程修改过。如果没有被修改,则更新count的值;如果被修改,则输出提示信息。这种方式可以减少锁的开销,但是需要处理并发冲突的情况。(注意:此代码并没有实现原子操作,只是实现了乐观锁)

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述​​​

在这里插入图片描述

​​​

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值