接口中固态的竞争条件
Posted ----max
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口中固态的竞争条件相关的知识,希望对你有一定的参考价值。
接口中固有竞争基本上因为锁定的粒度过小而引起,保护没有覆盖期望的操作的整体。
互斥元的问题也可以由锁定的粒度过大导致并发优势全无,因为线程一次只能过一个,即使它们访问的不是同一个数据。
linux的内核第一个版本就是使用了单个全局内核锁,虽然这样也能工作,但是可能导致双核处理器没有两个单个处理器效率更差。因为内核竞争太过于严重。
linux往后版本已经转移到一个根细粒化,在更细粒化的系统使用的化4个内核处理器是4个单处理器的4倍,因为竞争较少。
什么叫死锁?
1、当线程1和线程2都需要互斥元来执行一些操作。
2、同时每个线程都在互相等待。
3、线程无法进行。
如何产生死锁?
例如,同一个类的两个实例之间的数据交互操作。为什么这会导致线程死锁?因为复制构造函数为了保证数据正确的交互,不会因并发导致的数据发生变化,两个实例都需要锁定。
而在相同的两个实例之间交互数据,你将产生死锁。
但是在C++的标准库种有lock函数,它可以同时锁定两个或多个的互斥元。
但是lock在申请两个线程互斥元的情况其中互斥元一申请成功,但是二引发了异常,这时候lock会释放前一个互斥元,这是就没用了。
以上是关于接口中固态的竞争条件的主要内容,如果未能解决你的问题,请参考以下文章