线程间的通信

  • 线程通信
    通信方法: 多个线程共享进程的空间,所以线程间通信使用全局变量完成。
    注意事项:线程使用全局变量往往要同步互斥机制保证通信安全

  • 线程同步互斥方法:线程的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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值