我从两个不同的来源(网络侦听)接收更新,在这些来源上我得到一个类似于这样的方法的回调:
void onUpdate(Update* update)
{
static MutexT lock;
static hash_set<UpdateID> set;
ScopedGuard _(lock); //lock here
hash_set<UpdateID>::iterator it = set.find(update->id);
if (it == set.end())
set.insert(update->id);
else
return;
listener->onUpdate(/*some stuff*/);
}
由于两个来源都在为您提供相同的更新,因此您希望避免通知重复,您希望在两个来源之间进行仲裁,以与最先提供给您的人的最新信息保持同步,并且如果一个来源可能是错过的更新不可靠。问题是,锁定每次更新都很昂贵,如果我绝对不想要重复onUpdate
调用,有没有办法绕过这个锁定?
(或者至少是一种降低成本的方法?)