@

1.同步的概念

同步就是协同步调,按照预定的先后次序进行运行,如你说完我在说

同步在子面上容易理解为一起工作

其实不是,同指的应该是协同,协助,互相合作

如进程,线程同步,可以理解为进程或者线程A,B一块配合

A运行到某一个的阶段依靠B的某一个结果

所以A停下来,让B运行

B执行得到的结果给A,让A在继续操作

2.解决线程同时修改全局变量的方式

使用线程同步思路

线程a调取全局变量的时候,给变量加一把锁

当a执行完然后再释放锁

在上锁的过程中不允许其他的线程访问,就保证了数据的正确性

3.互斥锁

当多个线程同时修改某一个共享数据的时候,需要进行同步控制

最简单的同步机制就是互斥锁

互斥锁为资源引入一个状态:锁定/非锁定

互斥锁保证了多线程情况下数据的正确性

代码实现

import threading

g_num = 0

def test1(num):
global g_num
#上锁,如果之前没有被上锁,那么此时上锁成功
#如果上锁之前 已经被上锁了,那么此时会被堵塞到这里,直到 这个锁被解开为止
mutex.acquire()
for i in range(num):
g_num += 1
#解锁
mutex.release()
print("in test1 gnum = %d" % g_num) def test2(num):
global g_num
mutex.acquire()
for i in range(num):
g_num += 1
mutex.release() print("in test2 gnum = %d" % g_num) #创建一个互斥锁,默认是没有上锁的
mutex = threading.Lock() def main(): t1 = threading.Thread(target=test1,args=(100000000,))
t2 = threading.Thread(target=test2,args=(100000000,)) t1.start()
t2.start() if __name__ == '__main__':
main()

注意

  • 这里在for循环的外面给进程加了锁,循环完毕再给解锁,输出结果是先输出1亿,在输出2亿,毋庸置疑结果正确
  • 把加锁和解锁放在for循环里面,会出现第一个结果和第二个结果几乎同时出现,但是最后的结果是正确的,原因是在执行test1循环的时候计算完然后被test2抢去了,大事计算过程没有被打断,所以结果没有被影响

多任务-python实现-同步概念,互斥锁解决资源竞争(2.1.4)的更多相关文章

  1. python同步、互斥锁、死锁

    目录 同步 同步的概念 解决线程同时修改全局变量的方式 互斥锁 使用互斥锁完成2个线程对同一个全局变量各加9999999 次的操作 上锁解锁过程 总结 死锁 避免死锁 同步 同步的概念 同步就是协同步 ...

  2. 学习Go语言之使用原子访问或互斥锁解决竞态问题

    使用原子访问或互斥锁 // 解决竞态问题 package main import ( "fmt" "sync" "sync/atomic" ...

  3. python 并发编程 多进程 互斥锁 目录

    python 并发编程 多进程 互斥锁 模拟抢票 互斥锁与join区别

  4. 线程同步 - POSIX互斥锁

    线程同步 - POSIX互斥锁 概括 本文讲解POSIX中互斥量的基本用法,从而能达到简单的线程同步.互斥量是一种特殊的变量,它有两种状态:锁定以及解锁.如果互斥量是锁定的,就有一个特定的线程持有或者 ...

  5. java线程共享受限资源 解决资源竞争 thinking in java4 21.3

    java线程共享受限资源 解决资源竞争  具体介绍请參阅:thinking in java4 21.3 thinking in java 4免费下载:http://download.csdn.net/ ...

  6. python开发进程:互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

    一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...

  7. 【Python下进程同步之互斥锁、信号量、事件机制】

    " 一.锁机制:  multiprocess.Lock 上篇博客中,我们千方百计实现了程序的异步,让多个任务同时在几个进程中并发处理,但它们之间的运行没有顺序.尽管并发编程让我们能更加充分的 ...

  8. UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)

    一.使用互斥锁 1.初始化互斥量 pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//静态初始化互斥量 int pthread_mutex_init( ...

  9. Python中线程与互斥锁

    了解之前我们先了解一下什么是多任务? 概念: 几个不同的事件在同时运行就是多任务, 这样的话, 我们有牵扯到了真的多任务, 假的多任务; 并行: 真的多任务, 通过电脑的核数来确定 并发: 假的多任务 ...

随机推荐

  1. mac实用软件推荐 mac好用的软件

    终于入手了梦寐以求的苹果电脑,但却发现其操作系统与Windows大相径庭!不会使用怎么办?不用担心,我们可以借助软件的力量.一款实用的Mac软件不仅能够使你的工作效率显著提高,同时它还能帮助你更快地熟 ...

  2. 「LOJ 541」「LibreOJ NOIP Round #1」七曜圣贤

    description 题面很长,这里给出题目链接 solution 用队列维护扔掉的红茶,同时若后扔出的红茶比先扔出的红茶编号更小,那么先扔出的红茶不可能成为答案,所以可以用单调队列维护 故每次询问 ...

  3. Redis多线程原理详解

    本篇文章为你解答一下问题: 0:redis单线程的实现流程是怎样的? 1:redis哪些地方用到了多线程,哪些地方是单线程? 2:redis多线程是怎么实现的? 3:redis多线程是怎么做到无锁的? ...

  4. 宝塔Linux面板安装

    宝塔linux6.0版本是基于centos7开发的,务必使用centos7.x 系统 提示:Centos官方已宣布在2020年停止对Centos6的维护更新,各大软件开发商也逐渐停止对Centos6的 ...

  5. [python学习手册-笔记]003.数值类型

    003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  6. 免费撸12个月AWS服务器

    前言 AWS联合博客园免费发送福利了,活动时间11月1号-11月31号,注册AWS免费体验12个月的服务器哦. 参考教程 官网教程: https://www.cnblogs.com/cmt/p/139 ...

  7. Mac 上超好用的代码对比工具 beyond compare,对比json差异

    导读 昨天下午,公司业务跑不通,然后开发组长让架构师联系我,给我发一个json和部署到dev上的微服务url,让我去测试下,将发来的json放到json.cn上愣是解析不出来,我就用之前的json请求 ...

  8. JavaSE 学习笔记02丨对象与类

    Chapter 4. 对象与类 4.1 面向对象程序设计概述 面向对象程序设计(简称OOP),是当今主流程序设计范型.面向对象的程序是由对象组成的,每个对象(来自于标准库或自定义的)包含对用户公开的特 ...

  9. Java集合【1】--俯瞰java集合分类

    目录 (一) java集合分类 (1) Iterable接口 1. 内部定义的方法 1.1 iterator方法 1.2 forEach方法 1.3 spliterator方法 2. Collecti ...

  10. 你的Idea还可用吗?不妨试试这个神器!

    @ 目录 一.STS安装 1.STS下载 2.STS安装 二.STS使用 1.STS配置JDK 2.STS配置Maven 3.使用STS创建SpringBoot项目 三.优化STS 1.主题美化 2. ...