首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost光纤work_stealing屏障引起节段故障

boost光纤work_stealing屏障引起节段故障
EN

Stack Overflow用户
提问于 2018-08-20 06:58:19
回答 2查看 389关注 0票数 1

这是我在boost文档中找到的一个示例的完整版本,其中介绍了如何生成工作线程以与光纤work_stealing algo一起使用。

代码语言:javascript
复制
#include <iostream>
#include <chrono>
#include <boost/fiber/all.hpp>

int main() {
    size_t count = std::thread::hardware_concurrency();
    boost::fibers::barrier b{count};
    for(int i=0;i<count;i++) {
        new std::thread([&b, &count] {
            boost::fibers::use_scheduling_algorithm<boost::fibers::algo::work_stealing>(count);
            b.wait();
        });
    }
    std::this_thread::sleep_for(std::chrono::seconds(5));
    return 0;
}

这在大多数情况下都会导致分段故障,我不明白为什么。

在这里,cmake文件:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 17)

set(VERSION 1_68_0)
set(BOOST_ROOT /home/User/boost_${VERSION})

find_package(Boost REQUIRED COMPONENTS fiber)
find_package(Threads)

include_directories(${Boost_INCLUDE_DIRS})
add_executable(test test.cpp)
target_link_libraries(test ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})

我运行Fedora 28,并建立了从gcc 8.1.1的源代码,但没有安装它。该项目使用相同的编译器构建。(libc++没有在任何地方安装。)我对git分支、掌握和开发以及1_67_0都有同样的行为。我觉得我漏掉了一些显而易见的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-21 07:32:53

这是一个缺陷,将在分支开发中修复。问题是,在内部容器中窃取工作的标志的注册没有正确地同步。你的例子看起来应该是:

代码语言:javascript
复制
size_t count = std::thread::hardware_concurrency();
for(size_t i=1;i<count;i++) {
    new std::thread([&count] {
        boost::fibers::use_scheduling_algorithm<boost::fibers::algo::work_stealing>(count);
    });
}
boost::fibers::use_scheduling_algorithm<boost::fibers::algo::work_stealing>(count);
票数 3
EN

Stack Overflow用户

发布于 2018-08-21 06:50:38

我找到了另一个示例,它使用示例文件夹中的barrier.hpp,而不是促进:纤维::屏障。其他的一切都一样,就像魅力一样。

这意味着,尽管文档声明“此库提供的光纤同步对象在默认情况下将安全地同步运行在不同线程上的光纤”,但(来源)实际上并不是线程安全。我现在认识到,从来没有人说过这些是线程安全,但我仍然认为(与我最初工作的底层的示例相结合)是非常误导的。如果你非常密切地注意,并假设每一个词都是故意放置的,你就能看穿这个无意中的欺骗。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51925502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档