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

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

 

posted @   zwnsyw  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
历史上的今天:
2019-10-29 词云
点击右上角即可分享
微信分享提示