C ++中的多线程数据同步

yue

这是我的问题。我有几个线程可以修改结构的属性,还有一个线程可以读取结构。如何确定我正在读取的值没有被其他线程更改?就我而言,属性只能由一个线程修改。

例子:

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;
}

然后,如何确定当我读取glob时,writer1和writer2并未对其进行修改?

史提芬
#include <thread>
#include <atomic>
#include <iostream>
#include<chrono>

typedef struct
{
    std::atomic_int a;
    std::atomic<double> b;



} data;



data glob;


int main()
{
    glob.a.store(0);//store data in the atomic variable
    glob.b.store(0.0);

    std::thread reader([]()
    {
        while (1)
        {
            std::this_thread::sleep_for(std::chrono::seconds(1));
            std::cout << glob.a.load() << " " << glob.b.load() << std::endl; //get the value of the variable
        }
    });

    std::thread writer1([]()
    {
        while (1)
            glob.a++;
    });
    std::thread writer2([]()
    {
        while (1)
            glob.b.store(glob.b.load() +1); // std::atomic<double> has no member operator++ so have to improvise
    });


    int i;
    std::cin >> i;
}

这是<atomic>用于不可分割的访问和写入操作的简单解决方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ / Windows多线程同步/数据共享

来自分类Dev

C ++ / OpenCV多线程简单同步

来自分类Dev

在C ++中,我可以使用多线程工具将UNIX信号与主程序同步吗?

来自分类Dev

在C ++中,可以使用多线程工具将UNIX信号与主程序同步吗?

来自分类Dev

在C#中同步线程

来自分类Dev

Objective-C中的同步和异步调用与多线程之间有什么区别?

来自分类Dev

从C ++中的文件中多线程读取?

来自分类Dev

C ++类中的多线程非静态

来自分类Dev

C ++ 11上的类中的多线程

来自分类Dev

C#sqlite中的多线程

来自分类Dev

在C中写入文件多线程

来自分类Dev

c。中的多线程 互斥体

来自分类Dev

多线程在C ++中执行单个任务

来自分类Dev

多线程C程序中的随机函数

来自分类Dev

C中简单的多线程错误?

来自分类Dev

Windows froms C#中的多线程

来自分类Dev

chdir()和C中的多线程

来自分类Dev

C#中的多线程无法启动

来自分类Dev

在C#中尝试多线程

来自分类Dev

从C ++中的cppreference解释多线程示例

来自分类Dev

C#中的WCF多线程调用

来自分类Dev

C 中的多线程与多处理

来自分类Dev

多线程访问单个对象,但在C#中没有数据争用

来自分类Dev

多线程环境中的C#/ SQLServer数据库连接

来自分类Dev

在Python中同步多线程

来自分类Dev

多线程中的同步块

来自分类Dev

C#中的自制线程池上的多线程死锁

来自分类Dev

从tcl线程在C中定义多线程调用函数

来自分类Dev

C ++中的多线程:联接线程的正确方法