首页 > 其他分享 >window线程同步的四种方法

window线程同步的四种方法

时间:2023-07-29 18:00:30浏览次数:46  
标签:同步 访问 临界 信号量 互斥 window 线程 四种

原文链接:线程同步的四种方式

线程同步的四种方法

1、临界区(Critical Section):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。

优点:保证在某一时刻只有一个线程能访问数据的简便办法

缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

2、互斥量(Mutex):为协调共同对一个共享资源的单独访问而设计的。

互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。

优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

缺点:①互斥量是可以命名的,也就是说它可以跨越进程使用,所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。

②通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号量对象可以说是一种资源计数器。

3、信号量(Semaphore):为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况,当信号量的最大资源数=1就是互斥量了。

优点:适用于对Socket(套接字)程序中线程的同步。(例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。)

缺点:①信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点;

②信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难,加重了程序员的编码负担;

③核心操作P-V分散在各用户程序的代码中,不易控制和管理,一旦错误,后果严重,且不易发现和纠正。

4、事件(Event): 用来通知线程有一些事件已发生,从而启动后继任务的开始。

优点:事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。

缺点:

总结:

①临界区不是内核对象,只能用于进程内部的线程同步,是用户方式的同步。互斥、信号量是内核对象可以用于不同进程之间的线程同步(跨进程同步)。
②互斥其实是信号量的一种特殊形式。互斥可以保证在某一时刻只有一个线程可以拥有临界资源。信号量可以保证在某一时刻有指定数目的线程可以拥有临界资源。

标签:同步,访问,临界,信号量,互斥,window,线程,四种
From: https://www.cnblogs.com/ice-arrow/p/17590219.html

相关文章

  • 线程诊断笔记
    CPU占用过高1、top命令查看占用CPU较高的进程2、通过进程ID获取当前进程下线程的CPU占用情况打印进程ID,线程ID,以及占用CPUpsH-eopid,tid,%cpu3、通过jstack命令查询线程占用情况jstack【pid】4、十进制线程ID转换成十六进制并确定占用CPU较高的线程二、程序长时......
  • windows下移动硬盘无法识别的问题
    现象:插入移动硬盘后,指示灯亮并且能听到硬盘在转动的声音,在笔记本上能够识别。可以断定移动硬盘没有损坏。打开磁盘管理,看不到盘符,打开设备管理器,无大容量USB显示。  原因排查:拔出移动硬盘前未“安全移除USB”解决方案:插入机箱背后的其他USB接口正确插入移动硬盘后,查......
  • 进程与线程的对比
    在Python中,进程(Process)和线程(Thread)都是用于实现并发执行的机制,但它们有一些重要的区别。执行方式:进程是程序的一次执行过程,具有独立的内存空间,每个进程都有自己的代码段、数据段和堆栈;而线程是在进程内部执行的,共享进程的内存空间,包括代码段、数据段和堆栈。资源占用:由于每......
  • 线程池
    在Python中,可以使用concurrent.futures模块提供的线程池来管理和执行多个线程任务。线程池提供了一种方便的方式来处理并发任务,可以有效地利用系统资源,提高程序的性能。'''在Python中,可以使用concurrent.futures模块提供的线程池来管理和执行多个线程任务。线程池提供了一种方......
  • 多线程共享资源之竞态条件
    什么是竞态条件?竞态条件是指多个线程在访问和操作共享资源时,由于执行顺序的不确定性而导致结果不确定或出现错误。示例1:'''竞态条件是指多个线程在访问和操作共享资源时,由于执行顺序的不确定性而导致结果不确定或出现错误。'''importthreading#共享变量counter=0......
  • 多线程共享全局变量的问题
    线程之间共享全局变量多个线程都是在同一个进程中,多个线程使用的资源都是同一个进程中的资源,因此多线程间是共享全局变量问题示例1importthreading234#全局变量5g_num=0678#对g_num进行加操作9defsum_num1():10foriinrange(......
  • 多线程编程
    一、线程,进程介绍线程:是操作系统中独立运行的最小单位。每个线程都有自己的执行路径、程序计数器、堆栈和一组寄存器。线程共享进程的资源,如内存和文件描述符,可以并发执行,从而提高程序的并发性和响应性。进程:是操作系统中运行的一个程序实例。它拥有独立的内存空间和系统资源,如......
  • DaVinci Resolve Studio 18.5 (macOS, Windows) - 剪辑、调色、特效和音频后期制作
    DaVinciResolveStudio18.5(macOS,Windows)-剪辑、调色、特效和音频后期制作BlackmagicDesignDaVinciResolveStudio18.5请访问原文链接:https://sysin.org/blog/davinci-resolve-18/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgDaVinciResolve18免费......
  • Nexpose v6.6.208 for Linux & Windows - 漏洞扫描
    Nexposev6.6.208forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseJul27,2023请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • Windows 10 on ARM, version 22H2 (updated Jul 2023) ARM64 AArch64 中文版、英文版
    Windows10onARM,version22H2(updatedJul2023)ARM64AArch64中文版、英文版下载基于ARM的Windows10请访问原文链接:https://sysin.org/blog/windows-10-arm/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWindows10,version22H2(releasedNov2021)......