Я хочу использовать фьючерсы в многопоточном приложении C ++.
Значение, связанное с определенным обещанием, должно быть прочитано несколькими потоками.
Я, хотя 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 …) я хочу использовать Boost вместо нового C ++ 11.)
Заранее спасибо!
Задача ещё не решена.
Других решений пока нет …