两个线程,一个全局变量,其中一个线程读写这个变量,另一个线程只读这个变量,直接这样用安全吗,需要用criticalsection什么的同期吗,谢谢

解决方案 »

  1.   

    那个全局变量的字长如果小于等于机器的数据总线长度,而且是默认对齐的,就可以不用。
    比如机器是32位的,那么机器每个总线周期会按对齐的方式读出或写入32位的数据,如果这个全局变量在这32位中,就可以全部读出或写入。否则,如果对齐设置得不对,这个全局变量中有16位在这32位中,另16位在下个32位中,有可能造成读写数据不一致的错误。
    如果是64位的全局变量,可以使用InterlockedExchange64
      

  2.   

    也就是说BOOL,int32,char什么的都是安全的了,长一点的比如字符串什么的就得保护是吧
      

  3.   

    写线程用Interlocked* 族函数
    读线程直接读就好.