0

这是我的问题。我有两个线程 writer1 和 writer2 修改结构的属性,writer1 在 attribut1 中写入,writer2 在 attribut2 中写入。我有一个阅读结构的线程阅读器。我在等的是:writer1在写的时候,writer2也可以同时写。(不会造成问题,因为他们修改了不同的属性)。当然writer2在写的时候,writer1也可以同时写。但是当 Reader 正在读取结构的值时,writer1 和 writer2 都不能同时写入。我应该确定我正在读取的值不会被其他线程改变

示例:

typedef struct
{
    int a;
    double b;

} data;

data glob;

int main()
{

    thread reader([]()
    {
        while(1)
        {
            sleep(1s);
            cout << glob;
        }
    });

    thread writer1([]()
    { 
        while(1)
            glob.a++;
    });
    thread writer2([]()
    { 
        while(1)
            glob.b++;
    });

    int i;
    cin >>i;
}
4

2 回答 2

0

只需使用互斥锁;)使用起来非常简单,可以解决您的问题。 http://en.cppreference.com/w/cpp/thread/mutex

于 2016-05-30T09:23:42.507 回答
0

解决方案平面的一端——作者和读者共享的单个互斥锁和单个条件变量。

另一端 - 两个原子变量和阅读器在两者之​​间旋转。

并且在架构上最干净(并且如果做得正确也很快) - 由作者 ID 键入的阅读器的收件箱队列,因此不能将来自同一作者的两条消息排入队列。

于 2016-05-30T09:48:51.733 回答