本文共 835 字,大约阅读时间需要 2 分钟。
锁类属包含的类包装简单的锁定机制,比如互斥体、信号量、读/写互斥体和令牌等。这里我就以互斥体为例简单的介绍一下其使用方法,对其它的锁类进行一些简单的说明。
1.互斥体的使用。
互斥体用于保护共享的易变代码,也就是全局或静态数据。这样的数据必须通过互斥体进行保护,以防止它们在多个线程同时访问时损坏。
在ACE中可以通过ACE_Thread_Mutex实现线程的访问互斥,下面的例子演示ACE_Thread_Mutex类的使用。
#include "ace/Thread.h" #include "ace/Synch.h" #includeusing namespace std;ACE_Thread_Mutex mutex;static int number=1;void* Thread1(void *arg) { mutex.acquire(); ACE_OS::sleep(3); cout< <<"hello thread1"< <
在使用类属时一定注意锁的获取以及释放,
ACE_Thread_Mutex主要有两个方法:
当线程要访问共享资源时,首先调用acquire()方法获取互斥体,从而获取对改互斥体所保护的共享资源的唯一访问权限,访问结束时调用释放互斥体,使得其它线程能获取共享资源的访问权限。
在此例中,本来Thread2的打印消息在Thread1之前,但由于Thread1先获得互斥体,故Thread2只有待Thread1结束后才能进入临界区。读者朋友们可以通过将ACE_Thread_Mutex替换为ACE_NULL_Mutex看一下不加锁的执行结果。如果不加锁的话容易产生脏数据,出现数据相同的问题
转载地址:http://uwucn.baihongyu.com/