使用C++封装互斥锁的实践
来源:互联网 发布:手机oa软件 编辑:程序博客网 时间:2024/06/06 00:33
使用C++封装互斥锁的实践
代码如下所示:
/***********************/ // 完成互斥锁类的封装C++ // @file mutexLock.cc /***********************/#include <iostream>#include <pthread.h>#include <unistd.h>#include <assert.h>using std::cout;using std::endl;/*互斥锁类的封装*/class MutexLock{private: pthread_mutex_t _mutex;//互斥量 int _count; pthread_t _owner;public: MutexLock(); ~MutexLock(); void lock(); void unlock(); pthread_mutex_t getMutex();};//构造函数MutexLock::MutexLock(): _count(0), _owner(0){ cout <<"构造函数被调用" << endl; pthread_mutex_init(&_mutex, NULL);//初始化互斥量}//析构MutexLock::~MutexLock(){ pthread_mutex_destroy(&_mutex);}//加锁成员函数void MutexLock::lock(){ pthread_t self = pthread_self();//self为当前线程id if(_owner != self) { pthread_mutex_lock(&_mutex); _owner = self; } _count++; cout << "加锁" << endl;}//解锁成员函数void MutexLock::unlock(){ assert(pthread_self() == _owner); if(_count != 0) { _owner = 0; pthread_mutex_unlock(&_mutex); } cout << "解锁" << endl;}//getMutexpthread_mutex_t MutexLock::getMutex(){ return _mutex;}/*----以上为互斥锁封装部分----*//*----以下为实践测试部分----*///创建互斥锁对象myLockMutexLock myLock;//线程函数void* threadFunc(void* str){ char *msg = (char*)str; int i; MutexLock lock(myLock); //加锁 myLock.lock(); for(i = 0; i<5; i++) { cout << msg <<endl; sleep(1); } //解锁 myLock.unlock(); return NULL;}int main(void){ pthread_t tid_a, tid_b; char* str1 = "thread a"; char* str2 = "thread b"; pthread_create(&tid_a, NULL, threadFunc, str1); pthread_create(&tid_b, NULL, threadFunc, str2); pthread_join(tid_a, NULL); pthread_join(tid_b, NULL); return 0;}
执行结果如下:
注释掉加锁的代码部分,如下:
重新编译执行结果为:
对比可知,说明互斥锁起作用了。
0 0
- 使用C++封装互斥锁的实践
- 使用c++替代使用c的封装!
- AsyncTask 使用及封装实践
- C#-sealed 封装类的使用
- C语言udp的封装和使用
- 使用C算法封装盒子的尝试
- 程序设计基石与实践系列之失落的C语言结构体封装艺术
- Objective-C AVPlayer播放视频的使用与封装
- C语言动态封装库的建立和使用
- 在C#中使用ASV封装编程实践中遇到的问题总结
- 简析Js对象的封装与实践
- fetch实践 替代jquery封装的ajax
- C笔记--接口封装思想引导以及初步实践
- Objective-C中nil使用的最佳实践
- Objective-C中nil使用的最佳实践
- Objective-C中nil使用的最佳实践
- CAsyncSocket的封装使用
- AFNetworking的封装使用
- 关于C、内存、栈的一些杂谈
- 斯坦福大学机器学习公开课, 梯度下降算法,随机梯度下降算法,最小二乘拟合法总结以及证明
- 平衡二叉树+树的旋转
- 程序的性能优化之代码上的细节优化
- 一个绝对注意不到的小细节(深入理解计算机系统第五章5.5及5.6)
- 使用C++封装互斥锁的实践
- 剑指offer题目练习一
- 代码细节的终极优化之循环展开、多路并行
- JSON和XML
- 二叉树习题之重建二叉树
- 指针与++
- 简易俄罗斯方块
- Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效
- android – 多屏幕适配相关