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

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