zoukankan      html  css  js  c++  java
  • 原子变量与原子操作

    1.原子操作的速度要快于临界区,event,互斥量,如果多个线程同时写一个变量时,最方便的就是原子操作。
    原子操作函数,解决多线程安全

    2.原子变量也是为了解决线程冲突问题,
    如果两个线程同时访问同一个变量,一个线程改变了这个变量,另一个线程就会出现一些bug。

    3.release和debug模式
    release会进行代码优化,让代码速度更快,一般程序都要写成release。若想避免这种优化,使用关键字volatile,强制每次从内存中读取。
    操作系统操作所有的变量都需要依赖于寄存器。我们要访问一个变量,必须要读到寄存器中才可以访问。

    4.C语言中0和NULL是完全等价的。

    5.多个线程同时访问,同时写入同一个变量,会发生冲突。
    一个变量是线程安全,多线程同时读写没有误差。临界区,event事件,互斥量。

    6,原子操作

    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    #include <limits.h>
    
    
    int num = 0;
    DWORD WINAPI runX(void *p)
    {
        
        for (int i = 0; i < 10000; i++)
        {
            //num++;
            InterlockedIncrement(&num);    //表示num++,原子操作,
    保证完整操作,我操作完成后,后面的才能操作。
    InterlockedExchangeAdd(&num, 1); //num=num+1 } } int main() { HANDLE hd[10]; for (int i = 0; i < 10; i++) { hd[i] = CreatThread(NULL, 0, runX, NULL, 0, NULL); } WaiForMultipleObjects(10, hd, TRUE, INFINITE); printf("%d", num); system("pause"); }
  • 相关阅读:
    bzoj 4008 亚瑟王 期望概率dp
    t[..., 1, tf.newaxis]
    Keras learning_phase()和learning_phase_scope()
    Keras Sequential模型和add()
    Keras克隆层
    Keras搭建一个Wide & Deep 神经网络
    1 链表的数据结构
    海康威视2017软件精英挑战赛初赛题目
    2016年倒计时两天
    可自定义片头的腾讯视频无广告可全屏调用代码
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5783130.html
Copyright © 2011-2022 走看看