2018-04-15多线程-全局变量-互斥锁

多线程----threading
thread跨平台较弱,threading可以跨平台调用
理解线程:进程里面执行代码的箭头


2018-04-15多线程-全局变量-互斥锁_第1张图片
image.png

创建多个线头,在一个进程里面高速执行

线程的执行顺序:不确定
线程的几种状态:


2018-04-15多线程-全局变量-互斥锁_第2张图片
image.png

C语言的好处是不需要操作系统也能执行

多线程-共享全局变量:
*如果要在一个函数中使用全局变量并且对变量进行修改的话,要用global进行声明
*1s在计算机操作系统中是一个特别漫长的时间,计算机是用微秒来运行的
*在进程中,每个进程的全局变量不会共享,自己的是自己的
** ——在一个进程内的所有线程共享全局变量,能够在不适用其他方式的前提下完成多线程之间的数据共享(这点要比多进程要好)

线程共享全局变量的用处:
程序运行起来称为主进程;创建子进程之后,两个进程中的数据互不干涉;


2018-04-15多线程-全局变量-互斥锁_第3张图片
image.png

创建线程之后,只是创建了箭头,仍然是在同一个进程中运行,所以全局变量等数据共享;


2018-04-15多线程-全局变量-互斥锁_第4张图片
image.png

优点:不需要进程间通信;
弊端:进程间通信
*线程中主进程执行完毕之后,会等待子线程都执行完,程序才结束

把列表(可变类型)作为实参传递到线程中的时候,是可以共享的

原子性、事物:要么不做,要么一做做到底

避免全局变量被修改的方式:
1、*永无休止地判断某条件是否满足,成为“轮询”
轮询方式可以避免全局变量被修改造成的执行bug,但是,效率太低
2、互斥锁:保证多个线程安全访问竞争资源
threading模块中导入Lock


2018-04-15多线程-全局变量-互斥锁_第5张图片
image.png

加锁,能不加就不加,必须要加的位置加上
等待解锁的方式(通知)
加不加锁?——只要是对全局变量进行了修改,但不想让另一个线程得到修改后的结果,就要加锁;不修改只用就不加锁。

当创建线程之后,就创建了一个内存空间,其中的变量不被其他线程所用
——全局变量,共享(共享变量);函数里面的变量,各人是各人的。(非共享变量)

你可能感兴趣的:(2018-04-15多线程-全局变量-互斥锁)