首页 > 解决方案 > 您应该在 API 方法内部还是外部获取锁?

问题描述

假设您有一个打算在多个线程之间共享的类。Python 示例:

class ConcurrentClass:
    lock = threading.Lock()

    data1 = 1
    data2 = 2

    def modify_values(self, a, b):
        self.data1 = a
        self.data2 = b

最好在方法 modify_values() 中获取锁吗?

# class method
def modify_values(self, a, b):
    with self.lock:
        self.data1 = a
        self.data2 = b


# calling code
co = ConcurrentClass()
co.modify_values(1, 2)

还是应该让调用该函数的人来处理它?

# class method
def modify_values(self, a, b):
    self.data1 = a
    self.data2 = b


# calling code
co = ConcurrentClass()
with co.lock:
    co.modify_values(1, 2)

标签: pythonconcurrencythread-safetylocking

解决方案


推荐阅读