在初始化时保护共享数据
案例1. std::call_once使用,该案例中发送信息和接受信息都需要打开连接,但是这两个地方只需要调用一次打开连接即可。
class X
{
private:
connection_info connection_detail;
connection_handle connection;
std::once_flag connection_init_flag;
void open_connection()
{
connection = connection_manager.open(connection_details);
}
public:
X(connection_info const& connection_details_):
connection_details(connection_details_)
{}
void send_data(data_packet const& data)
{
std::call_once(connection_init_flag, &X::open_connection, this); //发送信息需要打开连接
connection.send_data(data);
}
data_packet receive_data()
{
std::call_once(connection_init_flag, &X::open_connection, this); //接受信息需要打开连接
return connection.receive_data();
}
};