小编Bou*_*ner的帖子

GCC与std :: async(std :: launch :: async)的行为与Clang的行为

有没有人有相当新的经验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)

c++ policy gcc clang c++11

10
推荐指数
2
解决办法
4339
查看次数

通过尾部和头部通过T形管道文件

这里开始,我尝试读取文件并发出文件的头部和尾部(仅读取文件一次).

我尝试了以下方法: tee >(head) >(tail) > /dev/null < text.txt

这行按预期工作,但我想摆脱/ dev/null.所以我尝试过: tee >(head) | tail < text.txt

但是这条线不能按预期工作(好吧,正如我预期的那样),它会打印头部,但之后不会返回.显然尾巴正在等待什么.但我不知道具体到底是什么.我发现了这个问题,但是我无法用给定的答案运行它.

bash shell tee

3
推荐指数
1
解决办法
2921
查看次数

关于std :: hash实现的公平假设

我们在研究数据库项目中使用了几种形式的散列.例如,对于基数聚类,我们使用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++ hash std floating

2
推荐指数
1
解决办法
55
查看次数

在堆栈上实例化一个类,其中var在头文件中定义

我目前正在尝试编写适当的C++代码(让它运行对于一些小型原型来说是好的,但它很难看).

我最近意识到堆和堆实例化的区别(O m = new O()vs O m()).

现在我有一个类,其中头文件定义了一个变量,它保存了一个表定义.

ChunkLoader.hpp:

TablePartion*tablePartial_;

ChunkLoader.cpp:

ChunkLoader(){ta​​blePartial_ = new TablePartial(true,0,1); }

现在我想在堆栈上实例化tablePartial,但我不能使用: TablePartial tablePartial_(true, 0, 1);

我完全失明了?如何在堆栈上分配tablePartial_?或者我完全错了,我不能在构造函数中使用,因为它会在构造函数之后超出范围并因此被释放?但是因为我读到堆栈变量在性能方面更好,所以我想使用堆栈实例化(并获得红色delete).

主要原因:堆栈溢出告诉我尽可能摆脱指针.:)

c++ heap stack instantiation

1
推荐指数
1
解决办法
647
查看次数

标签 统计

c++ ×3

bash ×1

c++11 ×1

clang ×1

floating ×1

gcc ×1

hash ×1

heap ×1

instantiation ×1

policy ×1

shell ×1

stack ×1

std ×1

tee ×1