什么是线程安全
线程安全指的是在多线程环境下,一个对象或者数据结构能够保证在并发访问时依然能够维持其预期的行为,不会出现数据不一致或者其他意外情况。
反之就是线程不安全。
import threading
class Counter:
def __init__(self):
self.value = 0
def increment(self):
self.value += 1
def worker(counter):
for _ in range(1000000):
counter.increment()
counter = Counter()
threads = []
for _ in range(10):
thread = threading.Thread(target=worker, args=(counter,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
print("Final counter value:", counter.value)
我们修改一下代码,将代码从线程不安全改为线程安全,代码如下:
import threading
class SafeCounter:
def __init__(self):
self.value = 0
self.lock = threading.Lock()
def increment(self):
with self.lock:
self.value += 1
def safe_worker(counter):
for _ in range(1000000):
counter.increment()
safe_counter = SafeCounter()
safe_threads = []
for _ in range(10):
thread = threading.Thread(target=safe_worker, args=(safe_counter,))
safe_threads.append(thread)
thread.start()
for thread in safe_threads:
thread.join()
print("Final safe counter value:", safe_counter.value)
在这个例子中,我们对Counter类进行了修改,添加了一个锁lock。在increment()方法中,我们使用with self.lock:语句来确保在同一时间只有一个线程能够修改计数器的值。这样就避免了竞态条件,从而使得计数器的值在多线程环境下是正确的。
执行的结果:
想学习测试开发的朋友,请添加吴老师微信:wulaoshi1978