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