计数器很常用,也经常会用到Inc/Dec,但是这个多线程并不安全;
使用的场景如下:
现在假设在一个两个线程的应用中用Inc进行加一操作可能出现的一种情况:
1、 线程A从内存中读出数据(假设为1)
2、 线程B从内存中读出数据(也是1)
3、 线程A对数据加一(现在是2)
4、 线程B对数据加一(现在也是2)
5、 线程A将数据存入内存(现在内存中的数据是2)
6、 线程B也将数据存入内存(现在内存中的数据还是2,但两个线程都对它加了一,应该是3才对,所以这里出现了错误的结果)
方案A:引用单元System.SyncObjs 使用 TInterlocked.Increment/TInterlocked.Decrement
方案B:引用单元Winapi.Windows 使用 InterlockedIncrement/InterlockedDecrement