我已经试过了的boost ::纤维::屏障,我无法找出原因如下代码死锁:为什么我升压纤维代码死锁
#include <boost/fiber/all.hpp>
#include <iostream>
#include <boost/range/algorithm/generate.hpp>
#include <boost/range/algorithm/for_each.hpp>
void barrier_test()
{
boost::fibers::barrier barrier(2);
std::vector<boost::fibers::fiber> myfibers(4);
boost::generate(myfibers, [&barrier]() {
return boost::fibers::fiber([](boost::fibers::barrier& barrier) {
static unsigned id_inc = 0;
const auto id = ++id_inc;
std::cout << "fiber id: " << boost::this_fiber::get_id() << " - local id: " << id << std::endl;
barrier.wait();
std::cout << "barrier passed, fiber id: " << boost::this_fiber::get_id() << " - local id: " << id << std::endl;
}, std::ref(barrier));
});
std::cout << "main fiber: " << boost::this_fiber::get_id() << std::endl;
boost::for_each(myfibers, [](boost::fibers::fiber& aFiber) {
aFiber.join();
});
std::cout << "end of program" << std::endl;
}
如果我设置的推出为“派遣”它可以通过。所以它与顺序有关,但我不知道什么是错的。所以我试图想象如何锁定幕后,什么得到运行等,但我无法找出,为什么原始代码无法完成。
如果有人不想尝试一下,让我把这里的输出我看到:
main fiber: 000000000042C960
fiber id: 000000000042C6E0 - local id: 1
fiber id: 000000000044CF60 - local id: 2
barrier passed, fiber id: 000000000044CF60 - local id: 2
fiber id: 000000000045D020 - local id: 3
fiber id: 000000000046D0E0 - local id: 4
barrier passed, fiber id: 000000000046D0E0 - local id: 4
barrier passed, fiber id: 000000000045D020 - local id: 3
我抄我的一个自定义的测试调度算法到测试代码,我看到的,过了一段时间,没有光纤可用于运行,本地ID 1光纤根本就没有继续。
升压版本1.63与Visual Studio 2015年预编译包和汇编是在64位
谢谢,我没有尝试valgrind这个例子,谢谢你的确认。 – newhouse