Mutex
来源:互联网 发布:xmarks的替代品 知乎 编辑:程序博客网 时间:2024/05/18 01:48
inline Mutex::Mutex(int type, const char* name) {
if (type == SHARED) {
//type如果是SHARED,则表明这个Mutex支持跨进程的线程同步。
//以后我们在Audio系统和Surface系统中会经常见到这种用法。
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(&mMutex, &attr);
pthread_mutexattr_destroy(&attr);
} else {
pthread_mutex_init(&mMutex, NULL);
}
}
inline Mutex::~Mutex() {
pthread_mutex_destroy(&mMutex);
}
inline status_t Mutex::lock() {
return -pthread_mutex_lock(&mMutex);
}
inline void Mutex::unlock() {
pthread_mutex_unlock(&mMutex);
}
inline status_t Mutex::tryLock() {
return -pthread_mutex_trylock(&mMutex);
}
AudioEffectShared.h中
effect_param_cblk_t() : lock(Mutex::SHARED), clientIndex(0), serverIndex(0) {}
AutoLock类是定义在Mutex内部的一个类,AutoLock的用法很简单:
先定义一个Mutex,如 Mutex xlock
在使用xlock的地方,定义一个AutoLock,如 AutoLock autoLock(xlock)
class Autolock {
public:
//构造的时候调用lock。
inline Autolock(Mutex& mutex) : mLock(mutex) { mLock.lock(); }
inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }
//析构的时候调用unlock。
inline ~Autolock() { mLock.unlock(); }
private:
Mutex& mLock;
};
现在的使用更简单:
Mutex::Autolock _l(mLock);
if (type == SHARED) {
//type如果是SHARED,则表明这个Mutex支持跨进程的线程同步。
//以后我们在Audio系统和Surface系统中会经常见到这种用法。
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(&mMutex, &attr);
pthread_mutexattr_destroy(&attr);
} else {
pthread_mutex_init(&mMutex, NULL);
}
}
inline Mutex::~Mutex() {
pthread_mutex_destroy(&mMutex);
}
inline status_t Mutex::lock() {
return -pthread_mutex_lock(&mMutex);
}
inline void Mutex::unlock() {
pthread_mutex_unlock(&mMutex);
}
inline status_t Mutex::tryLock() {
return -pthread_mutex_trylock(&mMutex);
}
AudioEffectShared.h中
effect_param_cblk_t() : lock(Mutex::SHARED), clientIndex(0), serverIndex(0) {}
AutoLock类是定义在Mutex内部的一个类,AutoLock的用法很简单:
先定义一个Mutex,如 Mutex xlock
在使用xlock的地方,定义一个AutoLock,如 AutoLock autoLock(xlock)
class Autolock {
public:
//构造的时候调用lock。
inline Autolock(Mutex& mutex) : mLock(mutex) { mLock.lock(); }
inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }
//析构的时候调用unlock。
inline ~Autolock() { mLock.unlock(); }
private:
Mutex& mLock;
};
现在的使用更简单:
Mutex::Autolock _l(mLock);
0 0
- Mutex
- Mutex
- mutex
- Mutex
- Mutex
- Mutex
- Mutex
- mutex
- Mutex
- Mutex及Mutex::AutoLock
- Mutex example
- Mutex测试
- Mutex使用
- boost mutex
- MultiThread Mutex
- Mutex 类
- oracle mutex
- c++ mutex
- Android系统横屏
- AngularJs filter 过滤器
- 交流耦合与直流耦合
- ionic iframe后退 iframe调用ionic代码
- 数组中出现次数超过一半的数字
- Mutex
- BZOJ P1005:[HNOI2008]明明的烦恼
- jms基本概念及原理
- Python中动态创建类实例
- @Autowired与@Resource的区别
- Mongostat
- Linked List Cycle问题及解法
- 拦截ajax请求
- leetcode142~Linked List Cycle II