大佬们,我又来了,请问除了使用互斥锁,有更好的方法吗
python吧
全部回复
仅看楼主
level 5
陆玖Orzº 楼主
下面是我写的代码,感觉写3个方法3把锁,都是重复代码有点繁琐了。
2021年01月04日 09点01分 1
level 5
陆玖Orzº 楼主
import threading
number = 0
def func_a():
global number
while True:
lockc.acquire()
if number >= 75:
break
for _ in range(5):
# time.sleep(0.5)
number += 1
print("{}:{}".format(threading.current_thread().name, number))
locka.release()
def func_b():
global number
while True:
locka.acquire()
if number >= 75:
break
for _ in range(5):
# time.sleep(0.5)
number += 1
print("{}:{}".format(threading.current_thread().name, number))
lockb.release()
def func_c():
global number
while True:
lockb.acquire()
if number >= 75:
break
for _ in range(5):
# time.sleep(0.5)
number += 1
print("{}:{}".format(threading.current_thread().name, number))
lockc.release()
if __name__ == "__main__":
locka = threading.Lock()
lockb = threading.Lock()
lockc = threading.Lock()
thread1 = threading.Thread(target=func_a)
thread2 = threading.Thread(target=func_b)
thread3 = threading.Thread(target=func_c)
locka.acquire()
lockb.acquire()
thread1.start()
thread2.start()
thread3.start()
2021年01月04日 09点01分 2
level 5
陆玖Orzº 楼主
有别的方法吗?比如,Condition队列,Ewent,但是我没想道怎么去控制保持123123这样的顺序去打印
2021年01月04日 09点01分 3
level 5
陆玖Orzº 楼主
如果用队列或者event的话,发出信号,好像没办法指定哪一个线程阻塞还是运行,只能让线程去争抢资源
2021年01月04日 09点01分 4
level 11
就一个Condition就可以实现啊
2021年01月05日 02点01分 5
比如线程1跑完,如何指定让线程2跑呢
2021年01月05日 02点01分
level 11
线程是由操作系统随机调度的,无法知道线程何时会执行
2021年01月05日 04点01分 6
level 11
你这问题就是个线程间通信,只要在线程内部判断条件,是挂起还是继续执行就可以了
2021年01月05日 04点01分 7
怎么判断,%15取余来判断吗
2021年01月05日 04点01分
@陆玖Orzº 思路是这样的,除法,取余。
2021年01月05日 05点01分
level 11
你三个函数,三把锁多余的
2021年01月05日 04点01分 8
网上学的
2021年01月05日 06点01分
对吧,互斥锁
2021年01月05日 06点01分
1