码迷,mamicode.com
首页 > 其他好文 > 详细

接口中固态的竞争条件

时间:2019-11-23 09:40:38      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:实例   全局   变化   构造函数   没有   多个   linux   处理器   之间   

接口中固有竞争基本上因为锁定的粒度过小而引起,保护没有覆盖期望的操作的整体。

互斥元的问题也可以由锁定的粒度过大导致并发优势全无,因为线程一次只能过一个,即使它们访问的不是同一个数据。

linux的内核第一个版本就是使用了单个全局内核锁,虽然这样也能工作,但是可能导致双核处理器没有两个单个处理器效率更差。因为内核竞争太过于严重。

linux往后版本已经转移到一个根细粒化,在更细粒化的系统使用的化4个内核处理器是4个单处理器的4倍,因为竞争较少。

什么叫死锁?

1、当线程1和线程2都需要互斥元来执行一些操作。

2、同时每个线程都在互相等待。

3、线程无法进行。

如何产生死锁?

 例如,同一个类的两个实例之间的数据交互操作。为什么这会导致线程死锁?因为复制构造函数为了保证数据正确的交互,不会因并发导致的数据发生变化,两个实例都需要锁定。

而在相同的两个实例之间交互数据,你将产生死锁。

但是在C++的标准库种有lock函数,它可以同时锁定两个或多个的互斥元。

但是lock在申请两个线程互斥元的情况其中互斥元一申请成功,但是二引发了异常,这时候lock会释放前一个互斥元,这是就没用了。

 

接口中固态的竞争条件

标签:实例   全局   变化   构造函数   没有   多个   linux   处理器   之间   

原文地址:https://www.cnblogs.com/----MAX/p/11915104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!