解决方案 »

  1.   


    #include <Windows.h>class MutexLock
    {
    public:
    MutexLock()
    {
    InitializeCriticalSection(&criticalSection_);
    } ~MutexLock()
    {
    DeleteCriticalSection(&criticalSection_);
    } void lock()
    {
    EnterCriticalSection(&criticalSection_);
    } void unlock()
    {
    LeaveCriticalSection(&criticalSection_);
    }private:
    MutexLock(const MutexLock&);
    MutexLock& operator=(const MutexLock&); CRITICAL_SECTION criticalSection_;
    };class MutexLockGuard
    {
    public:
    explicit MutexLockGuard(MutexLock& mutex)
    : mutex_(mutex)
    {
    mutex_.lock();
    } ~MutexLockGuard()
    {
    mutex_.unlock();
    }private:
    MutexLockGuard(const MutexLockGuard&);
    MutexLockGuard operator=(const MutexLockGuard&); MutexLock& mutex_;
    };
    MutexLock g_mutex;主线程
          得到accept 消息  获取socket 句柄{
    MutexLockGuard lock(g_mutex);
          vt.push(socket);
    }
         得到close消息 获取socket 句柄{
    MutexLockGuard lock(g_mutex);
       for(int i = 0; i < vt.size(); i++)
      {
            if(socket == vt[i])
            {
                 vt.del[i];
            }
      }
    }子线程
    广播{
    MutexLockGuard lock(g_mutex);
    for(int i = 0; i < vt.size(); i++)
    {
         send(vt[i], ......);
    }
    }
      

  2.   

    临界区 InitializeCriticalSection/EnterCriticalSection/LeaveCriticalSection