这段代码还有什么比升压互斥锁更快的吗?
Is there anything Faster than a boost mutex for this code?
目前在我的代码中,我有这样的部分
boost::mutex Mymutex
void methodA()
{
boost::mutex::scoped_lock lock(Mymutex);
......
......
......
}
我读到临界区比互斥锁快?所以我在做这样的事情,我想知道这样是否更快。
boost::recursive_mutex m_guard;
void methodA()
{
// this section is not locked
{
boost::lock_guard<boost::recursive_mutex> lock(m_guard);
// this section is locked
}
//This section not locked
}
第二种方法更快吗?我主要使用互斥锁的原因是为了防止竞争条件和锁定对方法的访问,以便一个线程一次访问它。还有比这更快的吗?我的另一个关注点是语句
boost::lock_guard<boost::recursive_mutex> lock(m_guard);
似乎每次调用methodA()时都会在堆栈上创建锁。我正在考虑将锁声明为静态变量,因此每次调用此方法时都不会在堆栈上创建锁。在这种情况下,我如何添加m_guard到它。例如
boost::recursive_mutex SomeClass::m_guard; //This is static
boost::lock_guard<boost::recursive_mutex> SomeClass::lock //Suppose this is static
void SomeClass::methodA()
{
{
//How do i make lock "lock" mguard
}
}
还有比这更快的吗?
如果忙等待适合您的情况,您可以尝试使用在boost::atomic_flag
之上实现的自旋锁。
SO:什么时候应该使用自旋锁而不是互斥锁?
class spinlock
{
atomic_flag flag = ATOMIC_FLAG_INIT;
public:
void lock()
{
while(flag.test_and_set(memory_order_acquire));
}
void unlock()
{
flag.clear(memory_order_release);
}
};
void foo()
{
static spinlock lock;
lock_guard<spinlock> guard(lock);
// do job
}
boost::lock_guard<boost::recursive_mutex> lock(m_guard);
似乎每次调用methodA()时都会在堆栈上创建锁。
它不是锁,它只是RAII包装器,在构造函数中锁定互斥锁,在析构函数中释放互斥锁。在栈上创建lock_guard是可以的
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 修改 VS Code 中的默认C++代码段
- 我是如何在这段代码中出现分段错误的
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 为什么这段代码不起作用,我该如何解决?
- 为什么这段代码给我错误? 有没有自错?
- 有人可以解释一下这段代码如何能够反转字符串
- 如何从C++代码中检索 QML 的文本字段中的文本?
- 可能我知道为什么这段代码没有给出任何输出吗?
- 这段代码的最后一行在做什么?
- 我不知道为什么这段代码会让核心被转储?
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 有人可以向我解释一下这段代码的作用吗?
- 在这段 python 代码中,大于符号是什么意思
- 为什么在此代码代码段中将复制构造函数两次称为两次
- c_str() vs std::这段小代码的真正区别是什么?
- 理解这段示例C++代码(类定义)
- c中的fork()命令——这段简单代码的输出是什么
- 在Visual Studio中对齐代码/代码边距
- 一段 qcustomplot 代码不起作用(小示例代码)