使用asio库的Active Object模式来管理共享数据,以避免对互斥锁的需求。
示例代码:
#include
using namespace boost::asio;
class ActiveObject { public: ActiveObject() : service_(), work_(service_) { thread_ = std::thread(boost::bind(&io_service::run, &service_)); }
~ActiveObject() {
service_.stop();
thread_.join();
}
template
void post(Handler handler) {
service_.post(handler);
}
private: io_service service_; work work_; std::thread thread_; };
class SharedData { public: SharedData() : value_(0) {}
void increment() {
value_++;
}
int get() const {
return value_;
}
private: int value_; };
class DataHandler { public: DataHandler(ActiveObject& active_object, SharedData& data) : active_object_(active_object), data_(data) {}
void increment() {
active_object_.post(boost::bind(&DataHandler::handleIncrement, this));
}
private: void handleIncrement() { data_.increment(); }
ActiveObject& active_object_;
SharedData& data_;
};
int main() { ActiveObject active_object;
SharedData data;
DataHandler handler(active_object, data);
for (int i = 0; i < 1000; ++i) {
handler.increment();
}
boost::this_thread::sleep_for(boost::chrono::milliseconds(10));
std::cout << "Shared data value: " << data.get() << std::endl;
return 0;
}