#include <mutex>
class some_data
{
int a;
std::string b;
public:
void do_something()
{}
};
class data_wrapper
{
private:
some_data data;//上一节对应的类设计
std::mutex m;
public:
template<typename Function>
void process_data(Function func)
{
std::lock_guard<std::mutex> l(m);//看起来slapping mutex就行 但是这种方式容易给下面的malicious function 绕过。
func(data);
}
};
some_data* unprotected;
void malicious_function(some_data& protected_data)//malicious 是图谋不轨的意思
{
unprotected = &protected_data;//不要在lock范围外传引用和指针
}
data_wrapper x;
void foo()
{
x.process_data(malicious_function);
unprotected->do_something();
}
int main()
{
foo();
}
c++ concurrency in action 3.2cpp
猜你喜欢
转载自blog.csdn.net/fly1ng_duck/article/details/81084669
今日推荐
周排行