|
Boost Users : |
Subject: [Boost-users] [Thread]: code snippet simulating future
From: Boost lzw (boostlzw_at_[hidden])
Date: 2010-03-30 09:03:47
Hi folks,
To better understand the "future" concept, I am looking at the following
code and have several questions:
(1) I got a compiling warning: 'this' : used in base member initializer
list. How can I get rid of it?
(2) how can I bind class's local data x_ into the new thread? I tried:
t_(boost::bind(&future<T>::run, this, x_) ), but it does not work.
(3) There seems a race condition in the overloaded function call
operator()(). What wrong did I do?
BTW: if the future is constructed as ctor using:
future(boost::function<T ()> const& f);
the code snippet works with minor modification.
Thanks in advance,
Cheers,
Robert
====== code snippet =====
#include <boost/bind.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>
#include <boost/function.hpp>
template<typename T>
class future : boost::noncopyable
{
public:
future(boost::function<T (int)> const& f, int);
T operator()();
private:
int x_;
bool joined_;
T v_;
boost::function<T (int)> const& f_;
boost::mutex m_;
void run();
boost::thread t_;
};
template<typename T>
future<T>::future(boost::function<T (int)>const& f, int x) : x_(x),
joined_(false), v_(T()), f_(f), t_(boost::bind(&future<T>::run, this) ) { }
template<typename T>
T future<T>::operator()()
{
mutex::scoped_lock lock(m_);
if (!joined_) {
t_.join();
joined_ = true;
}
return v_;
}
template<typename T>
void future<T>::run()
{
v_ = f_(x_);
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net