线程安全,读-取 ,都加锁
如果一个线程修改属性,而另一个线程读取相同的属性,那么在多线程环境中,为了确保数据的一致性,通常也需要使用锁来同步访问。 即使一个线程只读取属性而不修改它,也不能保证在读取的同时,另一个线程进行修改操作。如果没有适当的同步机制,可能会导致读取到不一致或不完整的数据。 以下是一个示例代码,演示了在一个线程修改属性,另一个线程读取属性时如何使用锁来确保线程安全:
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()
人生苦短,慢慢潇洒。
nsyw.run
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 词云