码迷,mamicode.com
首页 >  
搜索关键字:mutex    ( 1063个结果
Effective C++ Item 29 为”异常安全”而努力是值得的
经验:异常安全函数即使发生异常也不会泄漏资源或允许任何数据结构败坏。这样的函数区分为三种 可能的保证: 基本型-->发生异常,程序处于某个合法状态 强烈型-->发生异常,程序处于原先状态 不抛异常型-->承诺绝不抛出殿堂 示例: class PrettyMenu{ public: //... void changeBackground(std::istream &imgSrc); //改变背景图像 //... private: Mutex mutex; //互斥器 Image *bgI...
分类:编程语言   时间:2014-07-12 21:35:16    阅读次数:298
自旋锁与互斥锁
自旋锁(spinlock)与互斥锁(mutex)是并发编程中两个重要的概念。它们的主要作用是:对共享资源加锁以阻止数据的并发访问,从而保证数据一致性。但是它们也有一些不同点。本文主要介绍这些不同点,并说明我们什么时候该用自旋锁取代互斥锁。 理论基础 理论上,当一个线程尝试去获取一个互斥锁,但由于该互斥锁已经被其它线程获取而没有成功时,它会立刻进入休眠状态,从而让出CPU时间,允许其它线...
分类:其他好文   时间:2014-07-10 21:34:15    阅读次数:241
深入理解pthread_cond_wait、pthread_cond_signal
LINUX环境下多线程编程肯定会遇到需要条件变量的情况,此时必然要使用pthread_cond_wait()函数。但这个函数的执行过程比较难于理解。     pthread_cond_wait()的工作流程如下(以MAN中的EXAMPLE为例):        Consider two shared variables x and y, protected by the mutex mut,...
分类:其他好文   时间:2014-07-10 19:50:36    阅读次数:347
避免在同一机器上同时运行同一应用程序的多个实例
通常,使用有名互斥体(named mutex).但是该方案有以下的缺陷互斥体的名称有被其他应用程序使用的较小,潜在风险.此时,该方案不再有效,并且很难检测到bug.该方案无法实现允许一个应用程序产生N个实例这样的一般问题.使用Process类. 1 /// 2 //...
分类:其他好文   时间:2014-07-09 23:48:19    阅读次数:241
论条件变量cond_wait的原子性
使用的基本模板如下(参考APUE):signal代码序列如下,pthread_mutex_lock...pthread_cond_signalpthread_mutex_unlockwait代码序列如下,while (1){ pthread_mutex_lock(&mutex); ...
分类:其他好文   时间:2014-07-07 12:16:56    阅读次数:236
线程同步
一、互斥量互斥量从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。互斥量用pthread_mutex_t数据类型表示,在使用互斥变量以前,必须首先对它进行初始化。可以把它设置为常量PTHREAD_MUTEX_INITIALIZER(只对静态分配的互斥量),也可以通过...
分类:编程语言   时间:2014-07-07 08:20:59    阅读次数:222
spin_lock & mutex_lock的差别?
本文由该问题引入到内核锁的讨论,归纳例如以下为什么须要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是能够訪问全部内核数据的,因此要对共享数据进行保护,即相互排斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_t *v)将v...
分类:其他好文   时间:2014-07-05 17:44:12    阅读次数:155
boost 轻量级信号量
#include #include #include #include class semaphore{unsigned int count_;boost::mutex mutex_;boost::condition_variable condition_;public:explicit sema....
分类:其他好文   时间:2014-07-01 22:03:34    阅读次数:474
一种有效避免死锁的互斥锁设计
下面是摘自网络的一段话,我觉得很好;对认识锁很有帮助。 “为什么要加锁?加锁是为了防止不同的线程访问同一共享资源造成混乱。 打个比方:人是不同的线程,卫生间是共享资源。 你在上洗手间的时候肯定要把门锁上吧,这就是加锁,只要你在里面,这个卫生间就被锁了,只有你出来之后别人才能用。想象一下如果卫生间的门没有锁会是什么样? 什么是加锁粒度呢?所谓加锁粒度就是你要锁住的范围是多大。 比如你在家上...
分类:其他好文   时间:2014-06-29 23:50:07    阅读次数:362
Effective C++:条款29:为“异常安全”而努力是值得的
(一)先看下面这些代码: class PrettyMenu { public: void changeBackground(istream& imgSrc); private: Mutex mutex; //由于这个class希望用于多线程环境,所以它有这个互斥器作为并发控制之用 Image* bgImage; //目前的背景图像 int imageChan...
分类:编程语言   时间:2014-06-25 08:35:48    阅读次数:339
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!