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