1.5. C++併發 (初始化保護,只需要保護一次)

在初始化時保護共享數據
案例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();
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章