我正在尝试制作两个线程。一个用于将序数(1、2、3、4、5、6、7、8、9、10)(一一)写入外部变量(config1.variable1
)和其他线程读取这些值(一一)来自变量 config.variable1
。
我有两个文件,一个用于代码,另一个名为 config
用于 config1.variable
。我使用 acquire()
和 release()
管理并发问题,但我希望读取器线程在屏幕上写入:1,2,3,4,5,6,7,8,9,10
并且没有其他数字顺序,例如 1,3,2,4,6,5,7,8,9,10
,但它不起作用。
代码是这样的:
import threading
import config1
import time
def function1():
contador = 0
hilo_actual = threading.current_thread().getName()
while contador < 20:
print('waiting for block', hilo_actual)
block.acquire()
try:
contador = contador + 1
config1.variable1= config1.variable1 + 1
print('bloqued by', hilo_actual, contador)
print('config1.variable1', config1.variable1)
time.sleep(5)
finally:
print('releasing block by', hilo_actual)
block.release()
def function2():
contador = 0
hilo_actual = threading.current_thread().getName()
while contador < 20:
print('waiting for block', hilo_actual)
block.acquire()
try:
contador = contador + 1
time.sleep(1)
print('config1.variable1 in thread 2', config1.variable1)
finally:
print('release blocking by', hilo_actual)
block.release()
block = threading.Lock()
thread1 = threading.Thread(name='h1', target=function1)
thread2 = threading.Thread(name='h2', target=function2)
thread1.start()
thread2.start()