0

我有一个包含 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 字段,以分配相应的图片,但我得到了错误的访问错误。

任何想法?

谢谢。

4

1 回答 1

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
于 2013-08-13T12:32:09.730 回答