C++中多线程中的读取器和编写器
Reader and writer in multithread in C++
这是我的问题。我有两个线程 writer1 和 writer2 修改结构的属性,编写器 1 写在属性 1 中,编写者 2 在属性 2 中写入。我有一个线程阅读器来阅读结构。我等待的是:当 writer1 在写作时,writer2 也可以同时写作。(它不会引起问题,因为它们修改了不同的属性)。当然,当 writer2 在写作时,writer 1 也可以同时写作。但是,当读取器读取结构的值时,writer1 和 writer 2 都不能同时写入。我确保我正在读取的值不会被其他线程更改
示例:
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;
}
解决方案平面的一端 - 编写器和读取器共享的单个互斥锁和单个条件变量。
另一端 - 两个原子变量和阅读器在两者之间旋转。
在体系结构上最干净(如果做得好,速度也很快) - 由编写器 ID 键控的读取器的收件箱队列,因此来自同一编写器的两个邮件都无法排队。
只使用互斥;)它使用起来非常简单,可以解决你的问题。http://en.cppreference.com/w/cpp/thread/mutex
相关文章:
- 全局变量 多读取器 一个写入器多线程安全?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 在以读取为主的多线程程序中,可以使用原子来减少锁定吗
- 我们是否需要对多线程 x32 系统使用 lock 来读取或写入 uint32_t 变量
- 在C++中使用多线程时,是否可以读取半写的、损坏的原始变量?
- 多线程文件读取为每个线程生成相同的结果
- 如何读取锁定多线程C++程序
- 在多线程中是否可能发生读取对象的一半大小?
- 多线程C :从内存中读取力,绕过缓存
- 无法使用OpenCV打开两个摄像头-多线程摄像头读取
- c++多线程读取文件
- 多线程文件读取
- C++中多线程中的读取器和编写器
- 多线程从磁盘读取
- 用c++对文件进行多线程读取
- 在多线程应用程序中读取最快的文件
- 如果一个程序的主要功能是从磁盘中读取数据,那么让它多线程是不是一个好主意?
- 套接字:客户端读取消息时多线程不起作用
- 在多线程环境中读取变量是否总是有效的?
- 访问冲突读取位置0xfeeefef2多线程编程c++窗口