有没有人有相当新的经验std::async?我们目前正在实现并行文件解析器,它读取文件块并将此块传递给异步函数.
使用Clang(v3.0)这种方式可以很好地使用默认std::async策略(取决于实现).在一台双核机器上,它最多可以激活4个线程,效果非常好.
但是使用GCC(v4.7),文件读取线程不会产生任何新线程,使程序最终完全顺序.
使用std::launch::async,两个版本几乎都在做同样的事情(应该是这样).
有谁知道GCC的c ++ 11线程功能的当前状态?或者这可能是我们实施中的错误?
短代码:
while (readNewChunk()) {
Chunk &chunk = fileReader_.getChunk(); //reading the file
ChunkLoader *chunkLoader = new ChunkLoader();
auto ftr = std::async(std::launch::async, &ChunkLoader::createDictionaries, chunkLoader);
dictCreationFutures_.push_back(std::move(ftr));
}
Run Code Online (Sandbox Code Playgroud) 我们在研究数据库项目中使用了几种形式的散列.例如,对于基数聚类,我们使用n个最低有效位来确定聚类ID.我们std::hash用于散列,这对我们来说已经足够了.
然而,虽然我们知道大多数实现都使用了哈希整数的标识,但我们偶然发现浮动哈希(无论这是否有意义是另一种讨论)在不同平台上的不同实现.
我们可以做出任何公平的假设std::hash吗?
苹果系统:
clang version 6.0.1 (tags/RELEASE_601/final)
std::hash<float>{}(1.0f): 0000000000000000000000000000000000111111100000000000000000000000
std::hash<double>{}(1.0): 0011111111110000000000000000000000000000000000000000000000000000
Ubuntu的:
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
std::hash<float>{}(1.0f): 0101001111100101011001010000100100010100111101010010111101001101
std::hash<double>{}(1.0): 0111010001100001101001000101000001001110110011100111101110011011
我目前正在尝试编写适当的C++代码(让它运行对于一些小型原型来说是好的,但它很难看).
我最近意识到堆和堆实例化的区别(O m = new O()vs O m()).
现在我有一个类,其中头文件定义了一个变量,它保存了一个表定义.
ChunkLoader.hpp:
TablePartion*tablePartial_;
ChunkLoader.cpp:
ChunkLoader(){tablePartial_ = new TablePartial(true,0,1); }
现在我想在堆栈上实例化tablePartial,但我不能使用:
TablePartial tablePartial_(true, 0, 1);
我完全失明了?如何在堆栈上分配tablePartial_?或者我完全错了,我不能在构造函数中使用,因为它会在构造函数之后超出范围并因此被释放?但是因为我读到堆栈变量在性能方面更好,所以我想使用堆栈实例化(并获得红色delete).
主要原因:堆栈溢出告诉我尽可能摆脱指针.:)