gpt4 book ai didi

c - 当线程同步不重要时,互斥锁的成本如何?

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:32 26 4
gpt4 key购买 nike

我有一个跨线程访问的对象(一种队列)。队列对象可以在被任何一个线程使用之前被互斥锁定。

一种更简单的管理方法是将锁放入队列对象本身 - 因此每个 API 都会锁定队列并在工作完成后释放。这样,线程就不必与每个队列一起管理额外的互斥量变量。

现在我的问题是,有时只有一个线程正在访问队列(假设它是一个局部变量)。但由于现在队列本质上会先锁定其内部数据结构并在离开前解锁,这会是一件代价高昂的事情吗?

冗余 mutex_lock 和 mutex_unlock 操作的成本是多少 - 当没有特定的线程同步需求时?

附言:我的问题与这个问题略有相关:How efficient is locking an unlocked mutex? What is the cost of a mutex?

但我正在寻找我的设计中的具体答案并理解原因。

我正在使用 C 和 pthread 库。

最佳答案

处理此问题的一种方法是让您的队列初始化采用一个参数,该参数指示在队列操作期间是否应获取锁。如果一个队列被单个线程使用,它会被初始化,这样它就不会获取/释放锁(或者使用一个锁对象,其中获取/释放操作是 nops)。

请参阅此答案以了解 boost::pool 如何按照这些行执行某些操作(尽管在 C++ 中并作为编译时配置):https://stackoverflow.com/a/10188784/12711

类似的概念也可以应用于运行时的 C 代码。

关于c - 当线程同步不重要时,互斥锁的成本如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12219864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com