- 线程间通信
线程间通信强调的是贤臣之间传递对象引用
共享变量
-
线程安全
1)线程有GIL锁,但是拿到GIL锁不代表可以一直执行下去 2)现代计算机多线程也是A执行一会,B执行一会这样交替执行。 不然太僵硬了
代码:
```python
import requests
import time
from threading import Thread
zero = 0
def foo():
global zero
for i in range(10**7):
zero +=1
zero -=1
if __name__ == '__main__':
process_array = []
for i in range(2):
p = Thread(target=foo)
process_array.append(p)
p.start()
for p in process_array:
p.join()
print(zero)
-
解决线程安全
1)将重要指令包装成原子操作(不可分割的)。 2)加互斥锁
import requests
import time
from threading import Thread,Lock
zero = 0
lock = Lock()
def foo():
global zero
for i in range(10**7):
with lock:
zero +=1
zero -=1
if __name__ == '__main__':
process_array = []
for i in range(2):
p = Thread(target=foo)
process_array.append(p)
p.start()
for p in process_array:
p.join()
print(zero)