评估异步加载器的同步

时间:2017-02-16 15:54:50

标签: c++ synchronization mutex

我想收到如何解决以下问题的建议。

// Asynchronous loader
class AsyncLoader
{
void SendRequest()
{
std::tr1::bind(&AsyncLoader::OnSendRequest,this,std::tr1::placeholders::_1));
mutex.lock();
// send some request
}

void OnSendRequest()
{
mutex.unlock();
}

TSomeType GetCachedValue()
{
mutex.lock();
TSomeType ret = cachedValue;
mutex.unlock();
return ret;
}


TSomeType cachedValue;
Mutex mutex;

}

还有客户使用 AsyncLoader 发送请求以从后端更新 cachedValue 。有时我不需要发送请求,我可以通过调用 GetCachedValue()来询问 AsyncLoader 缓存的值。 有时,当一个客户端发送更新数据请求时,我遇到同步问题,但其他客户端调用 GetCachedValue()来接收缓存值。 很明显,我应该使用互斥量来同步评估 - 但事实上我很困惑,我应该在 SendRequest()中锁定互斥锁,并在其他函数中调用unlock OnSendRequest() 即可。在我看来,如果在请求期间发生了某些事情,并且 OnSendRequest()将不会被调用,那么这种解决方案就是潜在的死锁。

其他想法是从先前的请求中复制值具有真正的缓存值 - 但我希望最小化内存使用量。

P.S:也许甚至在这里我可以谈论这个问题 - 只有在完全初始化时才使用对象。如果对象未初始化,我应该等待它。 最好的问候,罗马。

0 个答案:

没有答案