0

マルチスレッド C++ アプリケーションでフューチャーを使用したいと考えています。特定の promise に関連付けられた値は、複数のスレッドによって読み取られる必要があります。boost::shared_future はそのために使用することを意図していますが、残念ながら値を一度しか読み取ることができません。

値を複数回読み取るにはどうすればよいですか?

boost::promise<std::string> dataProm;

boost::shared_future<std::string> sharedFut1( boost::move(dataProm.get_future()) );
boost::shared_future<std::string> sharedFut2( sharedFut1 );

dataProm.set_value( std::string("Hello World") );           // (in the producer thread)

std::cout << "Test1: " << sharedFut1.get() << std::endl;    // (in consumer thread 1), result: "Test1: Hello World"
std::cout << "Test2: " << sharedFut2.get() << std::endl;    // (in consumer thread 2), result: "Test2: "
std::cout << "Test3: " << sharedFut1.get() << std::endl;    // (in consumer thread 1, again), result: "Test3: "

(古いコンパイラ (MSVC...) をサポートするために、新しい C++11 の代わりに Boost を使用したい。)

前もって感謝します!

4

0 に答える 0