如设了个全局变量i,有多个线程对它进行访问,但可能一条语句就解决了,如这样:temp = i++;这需不需要设个临界区或互斥呢?

解决方案 »

  1.   

    需要
    定义:
    CRITICAL_SECTION CRITICAL_VARIABLE_WRITE;
    初始化:
    InitializeCriticalSection( &CRITICAL_VARIABLE_WRITE);
    加入临界区:
    EnterCriticalSection(&CRITICAL_VARIABLE_WRITE);
    temp = i++;
    LeaveCriticalSection(&CRITICAL_VARIABLE_WRITE);
      

  2.   

    int a = 1;a = 2; // 这句代码实际上是两句,把2放入寄存器,再从寄存器写入a的地址。看看汇编就知道了
      

  3.   

    对,临界区的速度最快  CRITICAL_SECTION
      

  4.   

    其它三种,在低层的实现一般都有是采用critical_section 
      

  5.   

    如果是i++就用InterlockedIncrement((LONG*)&i)
    如果是i=2就不变。
    如果是tmp=i;i=2;就用tmp=InterlockedExchange((LONG*)&i,2)