關於Windows/Linux線程互斥

來源:互聯網
上載者:User

對於線程互斥的實現:Windows有互斥體和臨界區兩個方法,Linux有pthread庫的互斥鎖。Windows線程同步一般使用臨界區。

這裡主要討論Windows臨界區與Linux互斥鎖的區別。

 

Windows:同一線程可以重複進入同一臨界區(當然也要多次離開),而線程不被系統阻塞。

Linux:同一線程不能重複進入同一臨界區。否則線程被阻塞。

 

下面是我寫的一個Windows/Linux通用線程互斥類

################### llock.h #####################

/********************************************************************
 建立日期: 2004/09/02
 檔案名稱: llock.h
 
      作者: 劉磊(vietor)
      版本: 1.0
      郵箱: liuleilover@163.com

  建立目的:
      Windows/Linux通用線程互斥鎖類。注意以下兩點:
      Windows:同一線程可以重複進入同一互斥(當然也要多次離開),而線程不被系統阻塞。
      Linux:同一線程不能重複進入同一臨界區。否則線程被阻塞。

  著作權聲明:
      您可以隨意拷貝和使用這個程式的副本,但請保證所有檔案的完整和
      不被修改,如果您有修改意見,請與作者聯絡。
 
*********************************************************************/

#ifndef _LLOCK_
#define _LLOCK_

#ifdef _WIN32
#include <windows.h>
#else
#include <pthread.h>
#endif
 
//互斥鎖類

class llock
{
public:

 inline llock(void)
 {
  m_bInit=true;
#ifdef _WIN32
  ::InitializeCriticalSection(&m_lock);
#else
  ::pthread_mutex_init(&m_lock,NULL);
#endif
 }

 inline ~llock(void)
 {
  if(m_bInit)
  {
   m_bInit=false;
#ifdef _WIN32
   ::DeleteCriticalSection(&m_lock);
#else
   ::pthread_mutex_destroy(&m_lock);
#endif
  }
 }
               //鎖定(進入互斥鎖)
 inline void lock(void)
 {
  if(m_bInit)
  {
#ifdef _WIN32
   ::EnterCriticalSection(&m_lock);
#else
   ::pthread_mutex_lock(&m_lock);
#endif
  }
 }
                //解鎖(離開互斥鎖)
 inline void unlock(void)
 {
  if(m_bInit)
  {
#ifdef _WIN32
   ::LeaveCriticalSection(&m_lock);
#else
   ::pthread_mutex_unlock(&m_lock);
#endif
  }
 }

private:
 bool volatile  m_bInit;
#ifdef _WIN32
 CRITICAL_SECTION m_lock;
#else
 pthread_mutex_t  m_lock;
#endif
};

//自動鎖定類(內聯方式使用)

class lautolock{
public:
  inline lautolock(llock& lock):m_lock(lock)
  {
    m_lock.lock();
  }
  inline ~lautolock()
  {
    m_lock.unlock();
  }
private:
  llock& m_lock;
};

#endif

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.