c++ concurrency in action 3.2cpp

#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();
}

猜你喜欢

转载自blog.csdn.net/fly1ng_duck/article/details/81084669