分几种情况
1,如果这两个线程属于同一个进程,该数据是该进程的全局变量;
2,如果这两个线程属于同一个进程,该数据是其中一个线程的全局变量;
3,这两个线程互不相干,该数据不是这两个线程中的变量,但这两个线程均可以访问;对于在多个线程中要进行多次访问的这种情况,应该如何锁定该数据???而且互不干扰,也不至于锁死???

解决方案 »

  1.   

    在用AfxBeginThread打开线程的时候把变量的指针作为参数传过去OK了
    变量声明加上 volatile
      

  2.   

    同一个进程可用临界区。 不同进程间需要用全局的Mutex之类的。最常用加锁方式是把资源的访问做成类, 在类内加锁。
    用户调用访问资源的函数时就自动锁定了。产生死锁的必要条件是多个资源多把锁时, 占用一个资源后又要另一个资源。因此在设计时把相关资源放在一起用一把锁就不会死了。
      

  3.   

    rtdb(东临碣石) :
    你好,我现在已经把对资源的访问做成类,当我在类里用Event进行加锁的,在这个类的每个访问的函数中都加上WaitSingleObject,用RsetEvent和SetEvent进行加锁和解锁。但是我在多个线程里对多个资源访问时,就已经锁死了。
      

  4.   

    1. 不同的资源应用不同的锁。
    2. EVENT不适合作锁, 换MUTEX试一下, 使用CSingleLock的LOCK和UNLOCK。
    3. 不要在锁定一个资源后再去锁定另一个资源。
       若是同时需要这两个资源, 就用一把锁。
      

  5.   

    CRITICAL_SECTION g_Cs_Count; //临界区::EnterCriticalSection(&g_Cs_Count);
    //加入你的操作
    ::LeaveCriticalSection(&g_Cs_Count);
      

  6.   

    用mutex最可靠。 WaitForSingleObject(m_hMutex,INFINITE);//申请独占权
    //加入你的操作
    ReleaseMutex(m_hMutex);//释放独占权
      

  7.   

    WriteSource()
    {
          CSingleLock.LOCK(mutex)
            .....
          CSingleLock.UNLOCK(mutex)。
    }
    ReadSource()
    {
          CSingleLock.LOCK(mutex)
            .....
          CSingleLock.UNLOCK(mutex)。
    }
    所有对资源的操作(读、写)都用这两个函数完成。不就没有任何问题了吗?