自旋锁 标签(空格分隔): 操作系统 1. 什么是自旋锁 自旋锁是为了实现保护 共享资源 而提出的一种机制, 其实自旋锁和互斥锁比较类似, 他们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。 2. 调度机 ...
分类:
其他好文 时间:
2019-08-31 23:13:28
阅读次数:
90
目录: 30.1 一个简单的混合锁 30.2 自旋,线程所有权和递归 30.3 FCL中的混合构造 30.4 著名的双检锁技术 30.5 条件变量模式 30.6 并发集合类 混合线程同步构造:合并了用户模式和内核模式构造。没有线程竞争时,混合构造提供了基元用户模式构造所具有的性能优势。多个线程竞争一 ...
分类:
编程语言 时间:
2019-08-31 12:28:59
阅读次数:
111
之前一直对锁的知识半知半解,写篇博客巩固下。 1、悲观锁、乐观锁 悲观锁每次操作都会加锁,会造成线程堵塞。而乐观锁则是假设不会冲突,每次操作都不会加锁。所以相较而言,乐观锁比较适合于竞争较少的场景,悲观锁比较适合竞争严重的情况。 2、公平锁、非公平锁 如果多个线程按照申请锁的顺序来获取锁,则是公平锁 ...
分类:
编程语言 时间:
2019-08-31 00:50:34
阅读次数:
78
CAS (compareAndSwap),中文叫比较交换,一种无锁原子算法。 过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最 ...
分类:
其他好文 时间:
2019-08-29 09:54:32
阅读次数:
78
锁的种类 Java中锁的种类大致分为偏向锁,自旋锁,轻量级锁,重量级锁。 锁的使用方式为:先提供偏向锁,如果不满足的时候,升级为轻量级锁,再不满足,升级为重量级锁。自旋锁是一个过渡的锁状态,不是一种实际的锁类型。 锁只能升级,不能降级。 偏向锁 是一种编译解释锁。如果代码中不可能出现多线程并发争抢同 ...
分类:
其他好文 时间:
2019-08-28 13:05:46
阅读次数:
100
一、可能有线程一直占用CPU资源 1. 先通过 ps 查看进程状态,找出进程的PID(8209)。 2.jstack l 8209 > /usr/local/work/tomcat/8209.stack 导出PID对应的线程信息到文件 3.对导出的线程文件下载本地做分析(可以文本打开) 4. ...
分类:
系统相关 时间:
2019-08-27 11:01:36
阅读次数:
88
IO复用:MariaDBPerconaDBweb:Nginx,LNMP,Memcached,tomcat,varnishwww.nginx.org官方站点Nginxpronouncedengine-xHTTP服务器反向代理:reverseproxy反向代理的协议httpmailnetcraft网站web市场占有率Nginx优势:高性能稳定性丰富的特性简单配置低资源消耗多进程模型进程切换阻塞状态不可
分类:
其他好文 时间:
2019-08-24 20:21:30
阅读次数:
84
实现一个线程安全的栈 这里使用数组来存储栈的数据。不足之处在于本例中的Stack可以无限扩容,更好的是初始化时候指定一个最大容量,防止不断扩容申请内存导致内存不够的问题。这里的线程安全使用一个串行队列来保证,实际上也可以通过加锁或者信号量甚至自旋锁来解决。 实现一个线程安全的队列 ...
分类:
编程语言 时间:
2019-08-22 18:29:28
阅读次数:
90
SpinWait 提供了两个方法和两个只读属性。 方法: SpinWait.Reset() : 重置自旋计数器,将计数器置 0。效果就好像没调用过SpinOnce一样。SpinWait.Once() : 执行一次自旋。当SpinWait自旋达到一定次数后,如果有必要当前线程会让出底层的时间片并触发上 ...
分类:
其他好文 时间:
2019-08-08 13:22:31
阅读次数:
91
互斥锁 共享资源的使用是互斥的,即一个线程获得资源的使用权后就会将改资源加锁,使用完后会将其解锁,所以在使用过程中有其它线程想要获取该资源的锁,那么它就会被阻塞陷入睡眠状态,直到该资源被解锁才会别唤醒,如果被阻塞的资源不止一个,那么它们都会被唤醒,但是获得资源使用权的是第一个被唤醒的线程,其它线程又 ...
分类:
其他好文 时间:
2019-08-06 15:35:15
阅读次数:
94