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

线程同步的几种方法

时间:2023-08-01 14:44:07浏览次数:27  
标签:同步 公共资源 互斥 几种 信号量 访问 临界 线程

线程同步的方式

     线程同步有:临界区、互斥区、事件、信号量四种方式
  临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别
  1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
  2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
  3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
  4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作

 

线程同步的几种方法:

https://blog.csdn.net/qq_22642239/article/details/126499820

1,Volatile  只能对变量操作

2,lock锁

3,信号量和句柄事件(ManualResetEvent 和 AutoResetEvent)

4,System.Theading.Monitor 类

标签:同步,公共资源,互斥,几种,信号量,访问,临界,线程
From: https://www.cnblogs.com/lc5259/p/17596409.html

相关文章

  • 分布式锁的几种实现方式
    分布式锁是用于解决分布式系统中多个节点同时访问共享资源时可能产生的并发问题的一种机制。它能够确保在同一时间只有一个节点能够获取到锁,从而保证了共享资源的一致性和可靠性。在实际应用中,有多种方式可以实现分布式锁,下面将详细介绍其中的几种常见实现方式。基于数据库的分布式......
  • c++多线程同步
    死锁问题1单核实时可抢占的系统中,优先级不同的三个线程A/B/C,A>B>C当C先获得时间片开始执行,并获得锁A因为高优先级,被唤醒并中断C,但没有得到锁,而阻塞B获得执行机会,由于优先级高于C,B会一直执行,让AC系统无法取得任何进展std::stack<T>stack;std::mutexmutex;voidpush(c......
  • 请求与线程
    在标准的JavaWeb应用程序中,每个请求通常都会由一个单独的线程来处理,而且这个线程是与请求一一对应的,也就是说每个请求都有一个对应的线程。当客户端发送一个HTTP请求到服务器时,服务器会为该请求创建一个新的线程来处理该请求。这个线程负责接收请求、处理请求、执行相应的业务逻......
  • java-多线程并发,CompletableFuture
    //无返回值@OverridepublicvoidexecCreateYmDetDataSubTask(YmDetCreateWorkerDtoymDetCreateWorkerDto){List<Long>sendIdList=ymDetCreateWorkerDto.getSendIdList();List<List<Long>>subLists=Lists.partition(sendIdList,1......
  • Java面试题 P25:Redis篇:redis是单线程的,但是为什么还那么快?
    一、Redis是单线程的,但是为什么还那么快1、Redis是纯内存操作,执行速度非常快2、采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题,加入并发锁,影响性能3、使用I/O多路复用模型,非阻塞IO二、你能解释一下I/O多路复用模型? ......
  • 音乐播放器实现歌词同步
    项目中音乐播放器实现歌词同步思路:1.读取LRC歌词文件信息2.将歌词时间段和对应时间段歌词保存至两个数组中,3.按时间顺序对两个数组进行排序核心代码如下:publicclassSongWord{publicString[]time;publicString[]songWord;publiclong[]songTime;privateUICon......
  • Java面试题 P19:Redis篇:Redis做为缓存,mysql的数据如何与redis进行同步呢(双写一致)
    双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。     共享锁:读锁代码 排他锁,写数据。读锁和写锁的值要一致。   MQ异步消息通知:    ......
  • boost asio多线程模式-IOThreadPool
    今天给大家介绍asio多线程模式的第二种,之前我们介绍了IOServicePool的方式,一个IOServicePool开启n个线程和n个iocontext,每个线程内独立运行iocontext,各个iocontext监听各自绑定的socket是否就绪,如果就绪就在各自线程里触发回调函数。为避免线程安全问题,我们将网络数据封装为逻辑......
  • boost asio多线程模型-IOServicePool
    前面的设计,我们对asio的使用都是单线程模式,为了提升网络io并发处理的效率,这一次我们设计多线程模式下asio的使用方式。总体来说asio有两个多线程模型,第一个是启动多个线程,每个线程管理一个iocontext。第二种是只启动一个iocontext,被多个线程共享,后面的文章会对比两个模式的区别,这......
  • rsync 远程同步
    目录一、rsync同步简介二、rsync同步1.同步方式2.备份的方式三、rsync常用命令四、配置源的两种表达方法1.格式一2.格式二五、配置rsync下行同步(定时同步)1.环境2.配置rsync源服务器3.发送端4.检测六、rsync实时同步(上行同步)1.定期同步的不足2.实时同步的优点3.......