[Boost-bugs] [Boost C++ Libraries] #10237: condition_variable

Subject: [Boost-bugs] [Boost C++ Libraries] #10237: condition_variable
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-07-24 05:30:20


#10237: condition_variable
-------------------------------------+----------------------
 Reporter: anonymous | Owner: anthonyw
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: thread
  Version: Boost 1.55.0 | Severity: Problem
 Keywords: condition_variable wait |
-------------------------------------+----------------------
 Os:any windows


 The app will wait infinitly when app code like below:


 //thread A
 {{{
 cout<<"Start to wait B..."<<endl;
 con.wait(lock);
 cout<<"Run A..."<<endl;
 boost::this_thread::sleep(boost::posix_time::seconds(1));//do something
 cout<<"Start to notify B..."<<endl;
 con.notify_one();
 cout<<"End to notify B..."<<endl;
 }}}

 //thread B
 {{{
 boost::this_thread::sleep(boost::posix_time::seconds(2));//do something
 con.notify_one();
 boost::this_thread::sleep(boost::posix_time::seconds(2));
 cout<<"Start to wait A..."<<endl;
 con.wait(lock);//thread A will call notify_one before this line
 cout<<"Run again A..."<<endl;
 }}}

 cause:\boost\thread\win32\condition_variable.hpp line 261
 {{{
 if(detail::interlocked_read_acquire(&total_count))
 }}}
 The code will get read acquire count,and skip release when read acquire
 count is zero

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/10237>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:16 UTC