C++多线程笔记:使用std::lock_guard实现对共享数据的保护



使用std::lock_guard实现对共享数据的保护,可使用如下简单实现:


class my_test_mutex {
public:
void add_to_list(int new_value)
{
  std::lock_guard guard(some_mutex);
  some_list.push_back(new_value);
}


bool list_contains(int value_to_find)
{
  std::lock_guard guard(some_mutex);
  return std::find(some_list.begin(),some_list.end(),value_to_find) != some_list.end();
}


private:
std::list some_list; // 被保护的数据
std::mutex some_mutex; // 互斥量
}


两个要点:
1、互斥量和被保护的数据,需要定义为private成员;
2、在成员函数中加入一个std::lock_guard对象;


上述实现可使得两个成员函数对被保护数据的访问是互斥的。


当然,使用互斥量来保护数据,并不是仅仅在每一个成员函数中都加入一个std::lock_guard对象那么简单。

我们需要精心组织代码来保护共享数据。


参考书:《c++ concurrency in action》

你可能感兴趣的:(C++多线程笔记:使用std::lock_guard实现对共享数据的保护)