Intel Inspector reports a data race in my spinlock implementation

前端 未结 3 1275
梦谈多话
梦谈多话 2020-12-31 18:31

I made a very simple spinlock using the Interlocked functions in Windows and tested it on a dual-core CPU (two threads that increment a variable);

The program seems

3条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-31 19:29

    I'm pretty sure it should be implemented as follows:

    class SpinLock
    {
       long lockValue;
       SpinLock(long value) : lockValue(value) { }
    
       void Lock() {
          while(InterlockedCompareExchange(&lockValue, 1, 0) != 0) {
              WaitABit();
          }
       }
    
       void Unlock() { InterlockedExchange(&lockValue, 0); }
    };
    

提交回复
热议问题