
mutex
文章平均质量分 57
金色熊族
这个作者很懒,什么都没留下…
展开
-
理解原子变量之一:从互斥锁到原子变量,最粗浅的认识
多线程编程对于程序员来说,是一项非常重要的技能。在C++11标准问世之前,C++标准是不支持多线程的。在C++11出台前,如果你想在linux平台进行多线程编程,就要使用linux的多线程库pthread,而pthread是按照POSIX标准实现的,与C++标准无关。在C++11标准下,你可以使用std::thread,实现多线程编程。但是,多线程编程涉及的不仅仅是thread,编程者也要考虑资源竞争的情形,这就涉及到互斥锁、信号量等。这些也包含在c++11中。原创 2024-11-01 13:34:34 · 883 阅读 · 0 评论 -
轻量锁与重量锁的思考
不论是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 · 302 阅读 · 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 · 242 阅读 · 2 评论 -
自旋锁和互斥锁的区别
转自https://www.jianshu.com/p/a7f349ddcf82自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu,自旋锁(spinlock)则是不断循环并测试锁的状态,这样就一直占着cpu。互斥锁:用于保护临界区,确保同一时间只有一个线程访问数据。对共享资源的访问,先对互斥量进行加锁,如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了...转载 2020-04-24 21:55:00 · 607 阅读 · 0 评论 -
Peterson算法的分析
部分代码转自https://blog.csdn.net/yrx0619/article/details/79383252Peterson算法目的是找到一个办法,当两个线程操作同一个资源时(比如一个读,一个写),避免冲突。读的线程执行读操作时,写线程不能对资源进行写操作;反之亦然。最朴素的想法,建立两个全局变量,分别表征线程1和线程2对资源的占用情况。当线程1占用资源时,线程2不得占用之;当...原创 2018-11-30 20:50:58 · 7100 阅读 · 2 评论 -
使用QMutex进行线程同步的探讨
前几天在博客园看到一篇文章http://www.cnblogs.com/kex1n/archive/2011/08/10/2133389.html,里面吧mutex作为一个静态成员放入一个自定义的类里。在类创生之时调用lock,类析构之时unlock。只要在关键的代码段建立一个类的实例即可,省去了手动写lock-unlock的麻烦,也降低了忘记写unlock的风险。这个办法的巧妙在于利用了静态成员原创 2016-10-27 23:25:44 · 2456 阅读 · 1 评论