[英]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.