原子變量與原子操作


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM