C ++中多线程的读写器

时间:2016-05-30 08:23:48

标签: c++ multithreading synchronisation

这是我的问题。我有两个线程writer1和writer2来修改struture的attributs,writer1在attribut1中写道,writer2在attribut2中写道。我有一个读取结构的线程阅读器。我正在等待的是:当writer1正在编写时,writer2也可以同时编写。(它不会导致问题,因为它们会修改不同的属性)。当然,当writer2正在编写时,writer1也可以同时编写。但是当读取器读取结构的值时,writer1和writer2都不能同时写入。我应该确保我正在读取的值不会被其他线程改变

例:

data.frame

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

在架构上最干净(并且在完成时也快) - 由编写器ID键入的读取器的收件箱队列,因此不能将来自同一编写器的两条消息排队。