在c ++中编写非常繁重的操作以进行测试

时间:2014-06-09 19:17:09

标签: c++ c++11

这可能与大多数问题相反,但出于测试目的,我想创建一个使用不创建数据竞争的非常慢的操作的谓词。与顺序实现相比,我需要测试并行实现,并且希望在不创建大规模向量的情况下执行此操作。我目前使用这个谓词:

[](std::size_t& v){
    v = 42; //some random number...
}

但是为了看到任何真实的结果我的矢量需要在大小方面是巨大的,我宁愿有一个更小的尺寸和更大的谓词执行时间...我应该写什么样的lamba函数是非常耗时的所以我可以测试我的实现吗?

1 个答案:

答案 0 :(得分:0)

只是一个想法,强制执行一些重复的读取 - 修改 - 写入:

std::size_t volatile& vv = v;
vv = 0;
for (int i = 0; i != 100; ++i) { vv +=1; }

由于编译器可能不会对此进行优化,因此它将涉及v的相当多的实际读取。也就是说,你可能仍会点击缓存。

如果要避免这种情况,则需要std::atomic_store