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"); }
  • 相关阅读:
    一篇文章读懂JSON
    不该被忽视的CoreJava细节(四)
    Java面试题总结(二)
    Java面试题总结(一)
    不该被忽视的CoreJava细节(三)
    不该被忽视的CoreJava细节(一)
    逐步解读String类(一)
    JSP注释格式
    命令行启动mysql服务
    经典进程的同步问题之——生产者&&消费者
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5783130.html
Copyright © 2011-2022 走看看