mutex
金色熊族
这个作者很懒,什么都没留下…
展开
-
轻量锁与重量锁的思考
不论是linux还是windows,操作系统都提供轻量和重量两种锁。在windows上,CRITICAL_SECTION(临界区)是轻量的,Mutex是重量的;在linux上,futex是轻量的,而pthread_mutex_t是重量的。根据Jeff Preshing 在他的博客Always Use a Lightweight Mutex上的测试,windows上的临界区比mutex快~25倍。这是因为mutex的调用要进入内核,而临界区不会。当然,临界区的劣势是它不可以在进程之间协调。但是,只要你的程序是原创 2021-11-28 18:48:54 · 266 阅读 · 0 评论 -
解答《Linux多线程服务端编程:使用muduo c++网络库》1.9节末的问题
在陈硕的著作《》1.9节末,提出一个问题:如何在临界区以外销毁资源? 这里给出两个解法。二者只有两句话次序前后的区别,但是一个正确,一个错误。 目录 正确的解法 代码 结果 错误的解法 代码 结果 结论 正确的解法 代码 #include <QCoreApplication> #include <QMutex> #include <memory> #include <QDebug> class CLock { public:..原创 2021-08-08 15:17:30 · 216 阅读 · 2 评论 -
自旋锁和互斥锁的区别
转自 https://www.jianshu.com/p/a7f349ddcf82 自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu,自旋锁(spinlock)则是不断循环并测试锁的状态,这样就一直占着cpu。 互斥锁:用于保护临界区,确保同一时间只有一个线程访问数据。对共享资源的访问,先对互斥量进行加锁,如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了...转载 2020-04-24 21:55:00 · 579 阅读 · 0 评论 -
使用QMutex进行线程同步的探讨
前几天在博客园看到一篇文章http://www.cnblogs.com/kex1n/archive/2011/08/10/2133389.html,里面吧mutex作为一个静态成员放入一个自定义的类里。在类创生之时调用lock,类析构之时unlock。只要在关键的代码段建立一个类的实例即可,省去了手动写lock-unlock的麻烦,也降低了忘记写unlock的风险。这个办法的巧妙在于利用了静态成员原创 2016-10-27 23:25:44 · 2403 阅读 · 1 评论 -
Peterson算法的分析
部分代码转自https://blog.csdn.net/yrx0619/article/details/79383252 Peterson算法目的是找到一个办法,当两个线程操作同一个资源时(比如一个读,一个写),避免冲突。读的线程执行读操作时,写线程不能对资源进行写操作;反之亦然。 最朴素的想法,建立两个全局变量,分别表征线程1和线程2对资源的占用情况。当线程1占用资源时,线程2不得占用之;当...原创 2018-11-30 20:50:58 · 6951 阅读 · 2 评论