Subject: Futex using boost, threads never wakeup
Hello all
I posted the following question in stackoverflow
https://stackoverflow.com/questions/75538799/futex-using-boost-threads-never...
0
https://stackoverflow.com/posts/75538799/timeline
I am studying about futex synchronisation Following up the manual
https://man7.org/linux/man-pages/man2/futex.2.html , I tried to
syncroniaze threads using boost futex However the threads never wake up
#include <iostream>#include <atomic>#include
#include <thread>#include
<vector>#include <chrono>void wait(std::atomic<int> & futexp){
int one = 1;
while(std::atomic_compare_exchange_strong(&futexp, &one, 0))
{}
std::cout << std::this_thread::get_id() << "," << futexp.load() <<
std::endl;
boost::fibers::detail::futex_wait(&futexp,0);
// std::this_thread::sleep_for(std::chrono::milliseconds(5000));
}void fpost(std::atomic<int> & futexp){
int zero = 0;
if (std::atomic_compare_exchange_strong(&futexp, &zero, 1)) {
boost::fibers::detail::futex_wake(&futexp);
}
}
std::atomic<int> futexp{1};int main() {
std::vectorstd::thread vec;
for(int i =0 ; i< 5;++i)
{
vec.emplace_back([]()
{
wait(futexp);
fpost(futexp);
});
}
Code demo https://godbolt.org/z/94hMsrW4a
I am using boost 1.66 and gcc 9.1 What goes wrong with this piece of code ?