欢迎来到《并发王者课》,本文是该系列文章中的第17篇。
在并发编程中,信号量是线程同步的重要工具。在本文中,我将带你认识信号量的概念、用法、种类以及Java中的信号量。
信号量(Semaphore) 是线程间的同步结构,主要用于多线程协作时的信号传递,以及对共享资源的保护、防止竞态的发生等。信号... ...
分类:
编程语言 时间:
2021-06-22 18:11:54
阅读次数:
0
1.控制并发线程数的Semaphore Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,保证合理的使用公共资源。 线程可以通过acquire()方法来获取信号量的许可,当信号量中没有可用的许可的时候,线程阻塞,直到有可用的许可为止。线程可以通过release() ...
分类:
其他好文 时间:
2021-06-18 19:20:53
阅读次数:
0
1.CountDownLatch CountDownLatch 允许一个或多个线程等待其他线程完成操作。假设现有一个需求:我们需要解析一个 Excel 里多个 sheet 的数据,此时可以考虑使用多线程,每个线程解析一个 sheet 的数据,等到所有的 sheet 都解析完之后,程序需要提示解析完成 ...
分类:
编程语言 时间:
2021-06-08 22:37:25
阅读次数:
0
目的:让一个驱动程序在同一时刻只能被一个进程使用。 方法:可以用原子操作也可以用信号量,用信号量的话还涉及到阻塞方式和非阻塞方式。 1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量 ...
分类:
其他好文 时间:
2021-06-03 17:46:21
阅读次数:
0
什么是优先级反转? 所谓的优先级翻转问题:即当一个高优先级线程通过信号量机制访问共享资源时,该型号量以被一个低优先级线程占有,而这个低优先级的任务在访问共享资源时可能又被一个中等优先级任务抢占。从上面的描述,高优先级线程被许多较低优先级的任务阻塞,导致高优先级的实时性得不到保证。 解决方案:(1)设 ...
分类:
系统相关 时间:
2021-06-02 12:13:13
阅读次数:
0
###1.服务容错的核心知识 ####1.1雪崩效应 在微服务架构中,一个请求需要调用多个服务是非常常见的。如客户端访问A服务,而A服务需要调用B服务,B服务需要调用C服务,由于网络原因或者自身的原因,如果B服务或者C服务不能及时响应,A服务将处于阻塞状态,直到B服务C服务响应。此时若有大量的请求涌 ...
分类:
其他好文 时间:
2021-05-24 09:35:32
阅读次数:
0
引言 上一篇文章我们介绍了AQS的信号量Semaphore《Java高并发编程基础三大利器之Semaphore》,接下来应该轮到CountDownLatch了。 什么是CountDownLatch CountDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕 ...
分类:
编程语言 时间:
2021-03-12 12:32:20
阅读次数:
0
时间片长度通过FreeRTOSConfig.h中的congfigTICK_RATE_HZ定义,比如congfigTICK_RATE_HZ设为100HZ,那么时间片长度就是10ms; portTICK_RATE_MS用毫秒作为单位时间数值,实际上也是基于congfigTICK_RATE_H; 只有FR ...
分类:
其他好文 时间:
2021-02-23 14:22:58
阅读次数:
0
本系列研究总结高并发下的几种同步锁的使用以及之间的区别,分别是:ReentrantLock、CountDownLatch、CyclicBarrier、Phaser、ReadWriteLock、StampedLock、Semaphore、Exchanger、LockSupport,这是第三篇,主要总结... ...
分类:
其他好文 时间:
2021-02-19 12:53:46
阅读次数:
0
什么是Semaphore信号量: Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 正常的锁(synchronized锁或Lock锁)在任何时刻都只允许一个任务访问一项资源,而Semaphore允许n个任务访问这个资源。 API: Se ...
分类:
编程语言 时间:
2021-02-09 12:33:43
阅读次数:
0