我有一个工作类,它运行自己的thread并行地执行一些工作。在特定的空隙中,我希望它是空闲的。我有个接口
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的矩阵乘法。然后发布于 2015-07-13 16:28:07
锁定/解锁互斥锁的成本取决于您的平台和特定的互斥实现。在最好的情况下,在没有争用的情况下,锁定/解锁互斥锁相当于两个互锁内存操作。
在发生争用锁定的情况下,由于大多数实现将发出内核调用以等待互斥锁的解锁,因此锁定将成为一项代价高昂的操作。但是,在这种情况下,您可能并不关心,因为首先要停止线程。
https://stackoverflow.com/questions/31387581
复制相似问题