zoukankan      html  css  js  c++  java
  • C++线程同步之原子操作

    所谓的原子操作就是指一个线程对于某一个资源做操作的时候能够保证没有其它的线程能够对此资源进行访问。

    原子操作仅仅能够解决某一个变量的问题,只能使得一个整型数据做简单算术运算的时候是原子的。

    以下案例需要在Debug模式下测试。

    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    long g_num;
    
    DWORD WINAPI ThreadProc1(LPVOID lpParameter)
    {
        // InterlockedExchangeAdd 为一个整型变量以原子方式加上一个数
        // InterlockedExchange 将一个32位数以原子方式赋值给另外一个数
        // InterlockedExchange64 将一个64位数以原子方式赋值给另外一个数
        // InterlockedCompareExchange 如果两个数相等,就将另一个数赋值,不相等无效果
    
        for (int i = 0; i < 100000; i++)
        {
            // InterlockedIncrement 给一个整形变量自增1
            InterlockedIncrement(&g_num);
            // g_num++;
        }
        return 0;
    }
    
    DWORD WINAPI ThreadProc2(LPVOID lpParameter)
    {
        for (int i = 0; i < 100000; i++)
        {
            // InterlockedIncrement 给一个整形变量自增1
            InterlockedIncrement(&g_num);
            // g_num++;
        }
        return 0;
    }
    
    int main()
    {
        HANDLE hThread1 = NULL;
        HANDLE hThread2 = NULL;
        hThread1 = CreateThread(0, 0, ThreadProc1, 0, 0, 0);
        hThread2 = CreateThread(0, 0, ThreadProc2, 0, 0, 0);
        // WaitForSingleObject 叫做等待函数,他能够等待线程结束,线程结束这个函数才会返回(或者时间到了)否则就阻塞住。
        WaitForSingleObject(hThread1, -1);
        WaitForSingleObject(hThread2, -1);
        cout << "g_num = " << g_num << endl;
        getchar();
        return 0;
    }
  • 相关阅读:
    R学习笔记3 数据处理
    R学习笔记2 因子
    R学习笔记1 介绍R的使用
    正则表达式之邮箱、手机号码、电话号码,url地址
    vue之axios运用
    angularJS导出数据到Excel
    vue2全选反选
    css设置垂直居中
    js实现鼠标选中文本改变选中区域颜色以及给选中区域加上html标签
    安装了Vetur之后的配置
  • 原文地址:https://www.cnblogs.com/duxie/p/11072219.html
Copyright © 2011-2022 走看看