Boost logo

Boost :

From: oliver.kowalke_at_[hidden]
Date: 2023-02-23 16:14:52


Code from namespace detail is not part of the public API. Do  not use this code (boost::fiber::detail::futex).

23.02.2023 14:51:39 tsoumplekas_giorgos via Boost <boost_at_[hidden]>:

> 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-wakeup
> 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
> <boost/fiber/detail/futex.hpp>#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::vector<std::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 ?
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk