ACE Lock类介绍
生活随笔
收集整理的這篇文章主要介紹了
ACE Lock类介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ACE Lock類屬
acquire():用來獲取互斥體,如果無法獲取,將阻塞至獲取到為止。 release():用來釋放互斥體,從而使自己或者其它線程能夠獲取互斥體。
鎖類屬包含的類包裝簡單的鎖定機制,比如互斥體、信號量、讀/寫互斥體和令牌等。這里我就以互斥體為例簡單的介紹一下其使用方法,對其它的鎖類進行一些簡單的說明。
1.互斥體的使用。
互斥體用于保護共享的易變代碼,也就是全局或靜態數據。這樣的數據必須通過互斥體進行保護,以防止它們在多個線程同時訪問時損壞。
在ACE中可以通過ACE_Thread_Mutex實現線程的訪問互斥,下面的例子演示ACE_Thread_Mutex類的使用。
#include "ace/Thread.h" #include "ace/Synch.h" #include <iostream> using namespace std; ACE_Thread_Mutex mutex; static int number=1; void* Thread1(void *arg) {mutex.acquire();ACE_OS::sleep(3);cout<<endl<<"hello thread1"<<number++<<endl;mutex.release();return NULL; } void* Thread2(void *arg) {mutex.acquire();cout<<endl<<"hello thread2"<<number++<<endl;mutex.release();return NULL; } int main(int argc, char *argv[]) { ACE_Thread::spawn((ACE_THR_FUNC)Thread1);//Thread2 比Thread1晚創建1秒鐘,故后嘗試獲取互斥體ACE_OS::sleep(1);ACE_Thread::spawn((ACE_THR_FUNC)Thread2);while(true)ACE_OS::sleep(10);return 0; }在使用ACE Lock類屬時一定注意鎖的獲取以及釋放,
ACE_Thread_Mutex主要有兩個方法:
當線程要訪問共享資源時,首先調用acquire()方法獲取互斥體,從而獲取對改互斥體所保護的共享資源的唯一訪問權限,訪問結束時調用釋放互斥體,使得其它線程能獲取共享資源的訪問權限。
在此例中,本來Thread2的打印消息在Thread1之前,但由于Thread1先獲得互斥體,故Thread2只有待Thread1結束后才能進入臨界區。讀者朋友們可以通過將ACE_Thread_Mutex替換為ACE_NULL_Mutex看一下不加鎖的執行結果。如果不加鎖的話容易產生臟數據,出現數據相同的問題
總結
以上是生活随笔為你收集整理的ACE Lock类介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACE线程管理机制
- 下一篇: ACE_Task介绍