我有 16 个线程来计算密钥的哈希值。我试图在线程之间分配工作,因为计算哈希并检查它是否以线性方式存在只使用了我 cpu 功率的一小部分。目前,我正在使用一个所有线程都可以使用互斥锁访问的地图容器。然而,由于实际的散列几乎不需要任何时间,线程大多处于空闲状态,等待另一个线程完成其业务,使用 map::count 检查键是否存在于映射中。
该程序的主要目标是蛮力检查碰撞,因为在我将它添加到我的项目之前,我需要确保没有碰撞。
有没有办法使用单独的映射或其他容器,并确定所述键是否存在,而不是在所有线程完成后使用每个键线性搜索每个映射?某种排队系统呢?
编辑:这是我试图线程的功能:
int coll = 0;
map<long, bool> mymap;
string temp;
long myhash;
for (int i = 0; i < 256; i++)
for (int j = 0; j < 256; j++)
for (int k = 0; k < 256; k++)
{
temp = i;
temp += j;
temp += k;
temp += temp;
myhash = hash(temp.c_str());
if (mymap.count(myhash))
{
coll++;
cout << "Collision at " << i << " " << j << " " << k << endl;
}
else
{
mymap[myhash] = true;
}
}
cout << "Number of collisions: " << coll << endl;
cout << "Map size: " << mymap.size() << endl;