多线程同步机制包括哪些什么是多线程同步机制,多线程同步机制包括:1。临界段用于实现“独占占有”;2.信号量用于跟踪有限的资源;3.互斥是核心对象,可以实现不同线程之间的“独占占有”;4.事件通常用于设计一些自定义的同步对象。

操作环境:Windows7系统,戴尔G3电脑。

多线程同步机制包括:

1、关键部分

临界段用来实现“独占占有”。应用范围在单个进程的线程之间。它是:

局部对象,不是核心对象。

快速高效。

不能有多个关键部分同时等待。

无法检测它是否已被线程放弃。

可以实现线程间互斥,但不能用来实现同步。

2、信号量

信号量用于跟踪有限的资源。它是:

核心对象。

没有主人。

可以命名,所以可以被其他进程打开。

它可以被任何线程释放。

既能实现线程间的互斥,又能实现线程间的同步。

跨进程使用时,如果拥有信号量的线程意外结束,则不会通知其他进程。

3、互斥

互斥是一个核心对象,可以实现不同线程之间的“独占占有”,即使那些线程属于不同的进程。它是:

核心对象。

如果拥有互斥体的线程结束,将会产生一个“已放弃”的错误消息。

我可以被命名,所以它可以被其他进程打开。

只能由拥有它的线程释放。

当跨进程使用时,如果带有互斥体的进程意外结束,其他进程将收到WAIT _ ABANDOEND消息。

4、事件

事件对象通常用于重叠输入/输出,或者设计一些自定义同步对象。它是:

核心对象。

但是用来实现线程的互斥和同步。

可以命名,所以可以被其他进程打开。

当跨进程使用时,如果拥有信号量的线程意外结束,则不会通知其他进程。

注意:临界区和互斥体都有“线程所有权”的概念,所以不能用来实现线程间的同步,只能用来实现互斥。原因是创建临界段或互斥体的线程可以无条件进入被保护程序段,而不需要等待LeaveCriticalSection(),因为它有这个权限。此外,互斥体可以很好地处理放弃操作。如果线程在没有释放对象的情况下意外终止,其他线程可以等待WAIT _ ADOPTED _ 0。但是无论是事件还是信号量都做不到。

事件和信号量可以实现线程和进程之间的互斥和同步。

就使用效率而言,关键区域的效率最高,因为它不是内核对象,而其他三个都是核心对象,需要通过操作系统来实现,效率相对较低。

但是如果你想跨进程使用它,你仍然需要互斥体、事件对象和信号量。

总之:设计的时候,一开始尽量不要用全局变量,如果不行,考虑用Inter.首先是()函数,然后是临界区对象,最后是事件、互斥体和信号量。以上是多线程同步机制的详细内容。请多关注其他关于Lei.com PHP知识的相关文章!

java线程同步机制有哪些_多线程同步机制包括哪些,java线程同步机制相关推荐

  1. java线程同步机制有哪些_多线程同步机制包括哪些

    多线程同步机制包括:1.Critical Section用来实现"排他性占有":2.Semaphore被用来追踪有限的资源:3.Mutex是核心对象,可以在不同的线程之间实现&qu ...

  2. burp爆破线程设置多少_多线程到底需要设置多少个线程?

    我们在使用线程池的时候,会有两个疑问点: 线程池的线程数量设置过多会导致线程竞争激烈 如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源 那么如何设置才不会影响系统性能呢?其实线程池的设置是 ...

  3. java并行流 阻塞主线程_多线程入门案例与java8的并行流

    java8 实例请移步https://www.cnblogs.com/ngLee/p/14021859.html 进程与线程 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 多线程的创建方式 ...

  4. 多线程调用同一个对象的方法_多线程之如何创建和使用线程

    一.创建线程和使用线程方式 1.1 继承Thread 让线程类继承自Thread类,然后重写run(),把需要多线程调用的代码放到run()中.但是需要开启线程的时候不能调用run方法,而是需要调用s ...

  5. java线程池原理简答_面试官让我讲讲Java线程池的实现原理,我笑了...

    期待与你,一起进步 随着cpu核数越来越多,不可避免的利用多线程技术以充分利用其计算能力.所以,多线程技术是服务端开发人员必须掌握的技术. 线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就 ...

  6. java从内存角度理解类变量_深入理解volatile类型——从Java虚拟机内存模型角度...

    一.前言 在java多线程编程中,volatile可以用来定义轻量级的共享变量,它比synchronized的使用成本更低,因为它不会引起线程上下文的切换和调度.所谓知己知彼.百战不殆.本文从JVM内 ...

  7. 前端的请求最大线程数是多少啊_面试官:创建多少个线程合适,我该怎么说?...

    转载:https://mp.weixin.qq.com/s/j5d4Jtxo0RgJWgpnG9HxlQ 为什么要使用多线程? 防止并发编程出错最好的办法就是不写并发程序 既然多线程编程容易出错,为什 ...

  8. java内存 phd文件抓取_您可以从IBM PHD Java堆转储中提取字符串的值吗?

    我有一个来自IBM jvm的PHD格式堆转储,我希望检查一些字符串的值.使用Sun JVM的二进制hprof转储,这是可能的,但是我无法从IBM转储中恢复此信息. 我试过了: >具有IBM DT ...

  9. java蓝桥杯加法变乘法_蓝桥杯-加法变乘法-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

最新文章

  1. 【MySQL】基础知识
  2. 092_元素的几种宽度和高度
  3. linux系统中 库分为静态库和,你知道linux 静态库和共享库?
  4. java 颜色比较_我该如何比较Java中的颜色?
  5. oracle rollup 小计,Oracle Group By 用法之 —— Rollup (小计功能)
  6. wpf 创建附加属性实例
  7. python之FTP程序(支持多用户在线)
  8. cesium画飞线_基于Cesium绘制抛物弧线
  9. 通过css3制作熊在冰川奔跑效果(animation、精灵图)
  10. 181212每日一句
  11. android音乐播放器app源码
  12. C#在Word表格中插入图片调整大小Debug
  13. 保存SVM模型并调用
  14. 华为工作十年离职感想
  15. 自考计算机毕业论文答辩视频,自考毕业论文答辩的全过程
  16. Python3.4如何读写Excel
  17. Mysql数据库备份恢复
  18. 近源社工-校内网渗透测试
  19. 从苹果售后到机器学习工程师,我趟过的 AI 坑
  20. 红旗linux桌面版反应慢,亲自感受红旗Linux系统优化大全

热门文章

  1. OpenCv 入门 -- 将图片中人物面部打码
  2. 【Unity3D-UGUI系列】(十二)ScrollView 滚动视图组件详解
  3. tablayout下划线长度
  4. Python赋值列表
  5. cmd进入指定目录(cmd进入指定目录命令)
  6. 科达飞讯SDK出现 20021,引擎错误
  7. 认识 ESP8266—ESP-01S (含AT指令)
  8. 【愚公系列】2023年03月 Java教学课程 099-MySQL数据库(SQL介绍)
  9. 【搜索】NOIP2000 or 洛谷1019单词接龙
  10. 1. Swift 中的 let 和 var