使用锁机制
在并发编程中,当多个线程同时访问共享资源时,可能会出现数据竞争的情况导致程序输出不同的结果。为了解决这个问题,可以使用锁机制来保证同一时间只有一个线程可以访问共享资源。
下面是一个示例代码,其中两个线程同时对一个变量进行自增操作,由于并发访问导致输出结果不同:
import threading
def add():
global num
for i in range(1000000):
num += 1
num = 0
thread1 = threading.Thread(target=add)
thread2 = threading.Thread(target=add)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(num)
可以通过使用锁机制来解决这个问题,代码如下:
import threading
def add(lock):
global num
for i in range(1000000):
lock.acquire()
num += 1
lock.release()
num = 0
lock = threading.Lock()
thread1 = threading.Thread(target=add, args=(lock,))
thread2 = threading.Thread(target=add, args=(lock,))
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(num)
使用锁机制可以保证在一个线程访问共享资源时,其它线程无法进行访问,从而保证了输出的结果的正确性和一致性。