繁体   English   中英

std::scoped_lock 和互斥锁排序

[英]std::scoped_lock and mutex ordering

我正在尝试确定std::scoped_lock 是否尝试建立一个排序或互斥 ID 以按规定的顺序获取锁。 我不清楚它是否是通过对我在谷歌搜索中发现的可浏览实现的稍微简短的了解来实现的

如果它不这样做,那么最接近获取有序锁集的标准实现的是什么?

通常避免死锁的最干净的方法是始终以相同的顺序获取一组锁(是的,当然,在尝试再次获取新锁之前总是释放它们,但也许 2PL 有点超出标准的 scope std::scoped_lock应该旨在做)

std::lock的顺序直到运行时才定义,并且不固定。 它是通过算法针对每次对std::lock的单独调用通过实验发现的。 std::lock的第二次调用可能会以与第一次不同的顺序锁定互斥锁,即使这两个调用可能在调用站点以相同的顺序使用相同的互斥锁列表。

下面是对std::lock的几种可能实现的详细性能分析: http://howardhinnant.github.io/dining_philosophers.html

使用固定顺序的互斥量是上述链接中进行性能比较的算法之一。 对于所进行的实验,它不是性能最好的算法。

OP 指向的libstdc++ 实现分析标签“智能和礼貌”的高质量实现

scoped_lock的构造函数被声明为在其互斥量上调用std::lock ,因此其行为受此 function 的约束。并且std::lock被专门定义为避免在其锁定的内容上发生死锁。 它锁定互斥量的顺序未定义,但不会导致死锁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM