繁体   English   中英

C ++中多线程的读写器

[英]Reader and writer in multithread in C++

这是我的问题。 我有两个线程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;
}

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

解决方案平面的一端-单个互斥体和单个条件变量,由编写者和阅读者共享。

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

从结构上讲,这是最干净的(如果做对的话,速度也很快)-由作者ID键入的读者的收件箱队列,因此不能将来自同一作者的两条消息排队。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM