HANDLE hMutex=CreateMutex(0,FALSE,"CRSERVER_MUTEX_ONCE"); ///利用互斥,防止多个程序运行,创建互斥量,FALSE 表示此互斥量现在不被任何线程所拥有.
if(hMutex)
{
         //如果hMutex互斥量存在,则这里处理.
}

解决方案 »

  1.   

    没错,用临界区不过临界区在读的时候也需要进入临界区,效率不行,
    ----------------
    这里楼主的意思让人费解,可能是你对临界区的理解不对吧比如一个全局变量 int g_iv;读的时候 不做同步
     a = g_iv;写的时候 
      enter... // 进入临界区
      g_iv = 1000;
      leave..  // 离开临界区为什么说读也要保护呢?另外,使用 临界区 比使用 mutex 要高效的多
      

  2.   

    if(x>y)
      x=y;这样的一句,x是需要互斥的量,被多个线程共同访问,每个线程都可能有上面的过程,比如都执行完了if那行,接着可能线程1把x赋了一个很大的值,而线程2马上又把他改写成了一个不是很大的值。
      

  3.   

    怎么帮我处理这两条语句吧
    if(x>y)
    x=y;
    x是全局变量。
    y是局部的
    目的是使x越来越大。
    不互斥可能会出现我上面说的那种情况的。有时候需要读x,怎么样能够比较的有效率
      

  4.   

    if(x>y)
      x=y;这样的一句,x是需要互斥的量,被多个线程共同访问,每个线程都可能有上面的过程,比如都执行完了if那行,接着可能线程1把x赋了一个很大的值,而线程2马上又把他改写成了一个不是很大的值。
    --------------
    同一时间,只能有一个线程能改这个值.这就是"临界区"和"互斥量"的作用.
    但你的意思好象是:
    需要做必须要线程1处理完成,再由线程2处理.再到线程3处理...令人费解..
      

  5.   

    用临界区就这样
    EnterCriticalSection// 进入临界区
    if (x > y)
        x = y;
    LeveCriticalSection// 离开临界区用互斥就这样
    WaitForSingleObject(hMutex, INFINITE) //
    if (x > y)
        x = y;
    ReleaseMutex(hMutex)难道不就这个样子吗?结果会有区别?实在是很不理解LZ啊.
    可能有写错的词,我没查.
      

  6.   

    安全的办法还是临界区,因为你不用临界区,很难保证写的时候不被操作系统分时中断,就像数据库不用事务,很难回滚一样。如同数据库事务只把在关键代码时开始,如修改金钱数量。基本上不会影响效率。临界区是操作系统在cup硬件上实现的,比任何软件实现方法可靠。