-
线程通信
通信方法: 多个线程共享进程的空间,所以线程间通信使用全局变量完成。
注意事项:线程使用全局变量往往要同步互斥机制保证通信安全 -
线程同步互斥方法:线程的Event
e = threading.Event() 创建事件对象
e.wait([timeout]) 如果e为设置状态则不阻塞否则阻塞
e.set() 将e变为设置状态
e.clear() 清楚设置
线程锁
lock = threading.Lock() 创建锁对象
lock.acquire() 上锁
lock.release() 解锁
* 也可以通过with lock: 上锁,上锁状态调用acquire会阻塞
- 演示线程的Event实现同步互斥
#演示线程的event事件来实现同步互斥
import threading
from time import sleep
s = None
e = threading.Event()
def bar():
print('bar拜山头')
global s
s = '天王盖地虎'
def fun():
print('呵呵..')
global s
s = '小鸡炖蘑菇'
def foo():
sleep(2)
print('说出口令就是自己人')
if s == '天王盖地虎':
print('我是座山雕,自己人')
else:
print('不是自己人,打死他')
e.set()
t1 = threading.Thread(target = bar)
t2 = threading.Thread(target = foo)
t1.start()
t2.start()
e.wait() # 验证完foo 和 bar 再执行 fun
fun()
t1.join()
t2.join()
- 线程锁演示
#演示线程锁
import threading
a = b = 0
lock = threading.Lock()
def value():
while True:
with lock:
if a!=b:
print('a = %d,b = %d'%(a,b))
t = threading.Thread(target = value)
t.start()
while True:
with lock:
a += 1
b += 1
t.join()