ACE Lock类介绍
鎖類屬包含的類包裝簡(jiǎn)單的鎖定機(jī)制,比如互斥體、信號(hào)量、讀/寫互斥體和令牌等。這里我就以互斥體為例簡(jiǎn)單的介紹一下其使用方法,對(duì)其它的鎖類進(jìn)行一些簡(jiǎn)單的說(shuō)明。
1.互斥體的使用。
互斥體用于保護(hù)共享的易變代碼,也就是全局或靜態(tài)數(shù)據(jù)。這樣的數(shù)據(jù)必須通過(guò)互斥體進(jìn)行保護(hù),以防止它們?cè)诙鄠€(gè)線程同時(shí)訪問(wèn)時(shí)損壞。
在ACE中可以通過(guò)ACE_Thread_Mutex實(shí)現(xiàn)線程的訪問(wèn)互斥,下面的例子演示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晚創(chuàng)建1秒鐘,故后嘗試獲取互斥體ACE_OS::sleep(1);ACE_Thread::spawn((ACE_THR_FUNC)Thread2);while(true)ACE_OS::sleep(10);return 0; }在使用ACE Lock類屬時(shí)一定注意鎖的獲取以及釋放,
ACE_Thread_Mutex主要有兩個(gè)方法:
當(dāng)線程要訪問(wèn)共享資源時(shí),首先調(diào)用acquire()方法獲取互斥體,從而獲取對(duì)改互斥體所保護(hù)的共享資源的唯一訪問(wèn)權(quán)限,訪問(wèn)結(jié)束時(shí)調(diào)用釋放互斥體,使得其它線程能獲取共享資源的訪問(wèn)權(quán)限。
在此例中,本來(lái)Thread2的打印消息在Thread1之前,但由于Thread1先獲得互斥體,故Thread2只有待Thread1結(jié)束后才能進(jìn)入臨界區(qū)。讀者朋友們可以通過(guò)將ACE_Thread_Mutex替換為ACE_NULL_Mutex看一下不加鎖的執(zhí)行結(jié)果。如果不加鎖的話容易產(chǎn)生臟數(shù)據(jù),出現(xiàn)數(shù)據(jù)相同的問(wèn)題
總結(jié)
以上是生活随笔為你收集整理的ACE Lock类介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ACE线程管理机制
- 下一篇: ACE_Task介绍