首页 > 其他分享 >线程安全,读-取 ,都加锁

线程安全,读-取 ,都加锁

时间:2023-10-29 21:46:43浏览次数:32  
标签:__ 加锁 data self 安全 线程 holder def

如果一个线程修改属性,而另一个线程读取相同的属性,那么在多线程环境中,为了确保数据的一致性,通常也需要使用锁来同步访问。 即使一个线程只读取属性而不修改它,也不能保证在读取的同时,另一个线程进行修改操作。如果没有适当的同步机制,可能会导致读取到不一致或不完整的数据。 以下是一个示例代码,演示了在一个线程修改属性,另一个线程读取属性时如何使用锁来确保线程安全:

import threading

class DataHolder:
    def __init__(self):
        self.data = None
        self.lock = threading.Lock()

    def set_data(self, new_data):
        with self.lock:
            self.data = new_data

    def get_data(self):
        with self.lock:
            return self.data

def writer_thread(data_holder):
    for i in range(10):
        data_holder.set_data(i)

def reader_thread(data_holder):
    for _ in range(10):
        data = data_holder.get_data()
        print(f"Read data: {data}")

def main():
    data_holder = DataHolder()

    writer = threading.Thread(target=writer_thread, args=(data_holder,))
    reader = threading.Thread(target=reader_thread, args=(data_holder,))

    writer.start()
    reader.start()

    writer.join()
    reader.join()

if __name__ == "__main__":
    main()

 

标签:__,加锁,data,self,安全,线程,holder,def
From: https://www.cnblogs.com/zwnsyw/p/17796558.html

相关文章

  • 多线程读取多个摄像头并把画面显示到Tkinter 的 label上面
    importcv2importthreadingimporttkinterastkfromPILimportImage,ImageTkclassCameraThread(threading.Thread):def__init__(self,camera_index,label):threading.Thread.__init__(self)self.camera_index=camera_indexs......
  • 网安基础入门(三)——APP架构与云安全
    网络安全基础入门(三)——APP架构&云安全知识点WebApp原生APPH5开发Flutter云安全云服务云原生特点及安全APP架构一、常规Web开发WebApp开发是指创建可以在网页浏览器中运行的应用程序。这些应用程序通常使用标准的Web技术(如HTML、CSS和JavaScript)来实现,并且可以通......
  • 《信息安全系统设计与实现》第八次学习笔记
    第四章:并发编程并行计算导论顺序算法与并行算法顺序算法:所有步骤通过单个任务依次执行,每次执行一个步骤,当所有步骤执行完成时,算法结束。并行算法:cobegin-coend代码块来指定独立任务,所有任务都是并行执行的,紧接着cobegin-coend代码块的下一个步骤将只在所有这些任务完成之后执......
  • 2023-2024-1 20211327 信息安全系统设计与实现 学习笔记7
    学习笔记7顺序算法与并行算法线程的原理与优缺点线程管理函数线程同步实践过程顺序算法与并行算法顺序算法(SequentialAlgorithm)原理:顺序算法是一种线性执行的算法,它按照顺序一步一步地解决问题。这意味着每个操作都依赖于前一个操作的结果,只有在前一个操作完成之后才......
  • C++多线程编程——线程的基本概念和使用方法
    什么是线程?在计算机科学中,线程是进程中的一个执行控制单元,也被称为执行路径。每个进程可以包含多个线程,每条线程并行执行不同的任务。线程是操作系统可识别的最小执行和调度单位。进程和线程的区别进程是程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的......
  • java基础漏洞学习----整数溢出漏洞+硬编码漏洞+不安全的随机数生成器
    java基础漏洞学习----整数溢出漏洞+硬编码漏洞+不安全的随机数生成器整数溢出漏洞publicclassNumberLearning{publicstaticvoidmain(String[]args){System.out.println(Integer.MAX_VALUE+1);System.out.println(Integer.MIN_VALUE-1);}}......
  • java实现多线程下载器
    前言:......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第八周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 四种常见线程池的原理
    newFixedThreadPool(固定数目线程的线程池)newCachedThreadPool(可缓存线程的线程池)newSingleThreadExecutor(单线程的线程池)newScheduledThreadPool(定时及周期执行的线程池)前三种线程池的构造直接调用ThreadPoolExecutor的构造方法。newSingleThreadExecutorpublicsta......
  • [学习笔记]--信息安全
    信息系统安全属性安全属性属性描述保密性最小授权原则,防暴露,信息加密,物理保密完整性安全协议,校验码,密码校验,数字签名,公证可用性综合保障(IP过滤,业务流程控制,路由选择控制,审计跟踪)不可抵赖性数字签名对称加密与非对称加密对称加密:加密和......