Any*_*orn 6 c++ performance multithreading boost
我的问题是,我有多个线程更新的块矩阵.多个线程可能一次更新不相交的块,但通常可能存在竞争条件.现在矩阵使用单锁锁定.
问题是,是否有可能(如果是,如何?)实现有效的锁定数组,以便一次只能锁定矩阵的一部分.
所讨论的矩阵可以变得相当大,按照50 ^ 2块的顺序.我最初的猜测是使用动态分配互斥量的矢量/映射.
这是好方法吗?是否更好地使用多个条件变量?有更好的方法吗?
使用一个锁.但是,不是使用它来保护整个矩阵,而是使用它来保护std::set(或者boost::unordered_set说)哪个块被"锁定".
像这样的东西.
class Block;
class Lock_block
{
public:
Lock_block( Block& block ) : m_block(&block)
{
boost::unique_lock<boost::mutex> lock(s_mutex);
while( s_locked.find(m_block) != s_locked.end() )
{
s_cond.wait(lock);
}
bool success = s_locked.insert(m_block).second;
assert(success);
}
~Lock_block()
{
boost::lock_guard<boost::mutex> lock(s_mutex);
std::size_t removed = s_locked.erase(m_block);
assert(removed == 1);
s_cond.notify_all();
}
private:
Block* m_block;
static boost::mutex s_mutex;
static boost::condition s_cond;
static std::set<Block*> s_locked;
};
Run Code Online (Sandbox Code Playgroud)