美文网首页Python学习
2018-04-15多线程-全局变量-互斥锁

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

作者: 菩灵 | 来源:发表于2018-04-15 20:45 被阅读92次

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


image.png

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

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


image.png

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

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

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


image.png

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


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

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

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

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


image.png

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

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

相关文章

  • Python多任务_线程

    简单使用 多线程共享全局变量-互斥锁

  • 多线程

    打印正在运行的多个线程 通过继承的方式实现线程 多线程共享全局变量 多线程共享全局变量 args参数 互斥锁 如果...

  • 多线程共享全局变量(加入互斥锁)

    #抛开互斥锁,我们先说说多线程共享全局变量问题: 1. 导入包,定义全局变量num(type为int类型) ...

  • 多线程共享全局变量(加入互斥锁)

    #抛开互斥锁,我们先说说多线程共享全局变量问题: 1. 导入包,定义全局变量num(type为int类型) ...

  • Python 高级5

    多任务-线程、多线程执行、线程注意点、自定义线程、多线程-共享全局变量、互斥锁、死锁 1. 多任务-线程 <1>多...

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

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

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • iOS底层探索-多线程锁

    多线程的锁大致可分为两大类:互斥锁、自旋锁;也可以分为三类:互斥锁、自旋锁、读写锁。 一、互斥锁:互斥+同步(强调...

  • C链表

    互斥锁:链表用在多线程中保证顺序,多个线程会操作同一个链表,互斥锁保证多线程操作的安全,互斥锁分情况使用,链表并不...

  • C++11多线程互斥锁`mutex`,`unique_lock`

    C++11多线程互斥锁mutex,unique_lock,lock_guard 互斥锁   互斥锁是线程中常用的线...

网友评论

    本文标题:2018-04-15多线程-全局变量-互斥锁

    本文链接:https://www.haomeiwen.com/subject/ubjdkftx.html