我有一个Worker类,它运行自己的thread
来并行完成一些工作。在特定的intervalls期间,我希望它是空闲的。我有一个界面
class Worker
{
mutex m_wait;
void pause() {
m_wait.lock();
}
void continue() {
m_wait.unlock();
}
static doWork(mutex& lock) {
while(true) {
{
lock_guard _l(lock);
// Lock and immidiatly unlock again
}
// Only *some* work
}
}
};
正如您所看到的,doWork
方法偶尔检查互斥锁是否被锁定(pause()
),如果是,则不会继续。
我对速度和替代方案的实施有一些疑问:
lock
会产生多少开销?假设我在实际工作(小数据集)中进行10x10 * 10x10的矩阵乘法。然后答案 0 :(得分:0)
锁定/解锁互斥锁的成本取决于您的平台和特定的互斥锁实现。在最好的情况下,锁定/解锁没有争用的互斥锁相当于两个互锁内存操作。
如果争用锁定成为一项代价高昂的操作,因为大多数实现都会进行内核调用以等待互斥锁解锁。但是在这种情况下你可能并不在意,因为最重要的是首先停止线程。