Linux平台上用C 實現多執行緒互斥鎖

2021-06-04 13:52:08 字數 2081 閱讀 7923

在上篇用c++實現了win32平台上的多執行緒互斥鎖,這次寫個linux平台上的,同樣參考了開源專案c++ sockets的**,在此對這些給開源專案做出貢獻的鬥士們表示感謝!

下邊分別是互斥鎖類和測試**,已經在fedora 13虛擬機器上測試通過。

lock.h

[cpp]view plain

copy

#ifndef _lock_h

#define _lock_h

#include 

//鎖介面類

class ilock  

virtual

void lock() const = 0;  

virtual

void unlock() const = 0;  

};  

//互斥鎖類

class cmutex : public ilock  

;  //鎖

class cmylock  

;  #endif

lock.cpp

[cpp]view plain

copy

#include "lock.h"

//動態方式初始化互斥鎖

cmutex::cmutex()  

//登出互斥鎖

cmutex::~cmutex()  

//確保擁有互斥鎖的執行緒對被保護資源的獨自訪問

void cmutex::lock() const

//釋放當前執行緒擁有的鎖,以使其它執行緒可以擁有互斥鎖,對被保護資源進行訪問

void cmutex::unlock() const

//利用c++特性,進行自動加鎖

cmylock::cmylock(const ilock& m) : m_lock(m)  

//利用c++特性,進行自動解鎖

cmylock::~cmylock()    

測試**

[cpp]view plain

copy

// pthread_mutex.cpp : 定義控制台應用程式的入口點。

//#include 

#include 

#include "lock.h"

using

namespace std;  

//建立乙個互斥鎖

cmutex g_lock;  

//執行緒函式

void * startthread(void *pparam)  

//對被保護資源(以下列印語句)自動加鎖

//執行緒函式結束前,自動解鎖

cmylock lock(g_lock);  

for( int i = 0; i 

return (void *)0;  

}  int main(int argc, char* argv)  

pthread_attr_init(&attr2);  

pthread_attr_setdetachstate(&attr2,pthread_create_joinable);  

if (pthread_create(&thread2,&attr2, startthread,pmsg2) == -1)  

//等待執行緒結束

void *result;  

pthread_join(thread1,&result);  

pthread_join(thread2,&result);  

//關閉執行緒,釋放資源

pthread_attr_destroy(&attr1);  

pthread_attr_destroy(&attr2);  

int iwait;  

cin>>iwait;  

return 0;  

}  

編譯成功後,執行程式

同樣,若將下邊**注釋掉,重新編譯

[cpp]view plain

copy

//cmylock lock(g_lock);

執行程式

結果顯而易見。

Linux平台上用C 實現多執行緒互斥鎖

在上篇用c 實現了win32平台上的多執行緒互斥鎖,這次寫個linux平台上的,同樣參考了開源專案c sockets的 在此對這些給開源專案做出貢獻的鬥士們表示感謝!下邊分別是互斥鎖類和測試 已經在fedora 13虛擬機器上測試通過。lock.h ifndef lock h define lock...

用C 實現多執行緒Mutex鎖

準備知識 1,核心物件互斥體 mutex 的工作機理,waitforsingleobject函式的用法,這些可以從msdn獲取詳情 2,當兩個或更多執行緒需要同時訪問乙個共享資源時,系統需要使用同步機制來確保一次只有乙個執行緒使用該資源。mutex 是同步基元,它只向乙個執行緒授予對共享資源的獨佔訪...

Linux平台用C 封裝執行緒讀寫鎖

測試通過。rwlockimpl.h view plain ifndef rwlockimpl header define rwlockimpl header include include include include using namespace std 讀寫鎖允許當前的多個讀使用者訪問保護資...