我有一个包含Facebook好友数据矢量的课程:
std::vector<FBFriend> m_friends
FB是一个非常简单的结构:
struct FBFriend
{
std::string ID;
std::string photoPath;
std::string name;
bool installed;
int score;
};
当我从FB(在异步线程中)下载数据时,我遍历m_friends字段,分配相应的图片,但是我得到了错误的访问错误。
有什么想法吗?
感谢。
答案 0 :(得分:0)
从多个线程访问变量时,必须同步读取和写入以避免数据竞争。
以下是使用std::mutex
和std::lock_guard
同步访问权限的简单示例:
std::mutex m;
std::vector<FBFriend> v;
// Add two FBFriend to vector.
v.push_back({"user1", "/photos/steve", "Steve", true, 0});
v.push_back({"user2", "/photos/laura", "Laura", true, 0});
// Change element in vector from a different thread.
auto f = std::async(std::launch::async, [&] {
std::lock_guard<std::mutex> lock(m); // Aquire lock before writing.
v[0].photoPath = "/images/steve";
});
f.wait(); // Wait for task to finish.
std::cout << v[0].photoPath << std::endl;
std::cout << v[1].photoPath << std::endl;
输出:
/images/steve
/photos/laura