下面先对condition_impl进行简要分析。condition_impl在其构造函数中会创建两个Semaphore(信号量):m_gate、m_queue,及一个Mutex(互斥体,跟boost::mutex类似,但boost::mutex是基于CriticalSection的):m_mute...
分类:
其他好文 时间:
2014-06-20 20:11:44
阅读次数:
211
除了thread,boost::thread另一个重要组成部分是mutex,以及工作在mutex上的boost::mutex::scoped_lock、condition和barrier,这些都是为实现线程同步提供的。mutexboost提供的mutex有6种:boost::mutexboost::...
分类:
其他好文 时间:
2014-06-20 19:59:40
阅读次数:
293
#include #include #include #include void *thread_function(void *arg);pthread_mutex_t work_mutex;#define WORK_SIZE 1024char work_area[WORK_SIZE];int ti...
分类:
编程语言 时间:
2014-06-19 00:15:42
阅读次数:
326
本文由该问题引入到内核锁的讨论,归纳例如以下为什么须要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是能够訪问全部内核数据的,因此要对共享数据进行保护,即相互排斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_t *v)将v...
分类:
其他好文 时间:
2014-06-18 16:11:05
阅读次数:
224
1.boost锁的概述: boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。2.mutex对象类(主要有两种): 1.boost::mutex(独占互斥类) -->有lock和unlock方法 2.boost::shared_mutex(共享互斥类) -->有...
分类:
编程语言 时间:
2014-06-18 11:16:03
阅读次数:
262
MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构变更的一致性。MDL锁的加锁模式和源码上的组织上和上一篇blog中MySQL表锁的实现方式一致,都采用了【mutex+condition+queue】来实现并发,阻塞,唤醒的控制。下面就来看看MD...
分类:
数据库 时间:
2014-06-16 13:12:51
阅读次数:
383
1.boost里的互斥量类型由mutex表示。代码示例:12345678910111213141516171819202122232425#include #include #include #include #include usingnamespacestd;usingnamespaceboos...
分类:
其他好文 时间:
2014-06-16 00:06:34
阅读次数:
399
●boost锁的概述boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。▲mutex对象类mutex类主要有两种:boost::mutex,boost::shared_mutex,其中mutex有lock和unlock方法,shared_mutex除了提供lock和u...
分类:
其他好文 时间:
2014-06-15 23:47:04
阅读次数:
312
1.在单线程中,我们每次只能做一件事情。
而在多线程中,其实最本质的也是一次只能做一件事情,只是CPU给定的时间片完成之后,切换到另一个线程,然后这个分配CPU的时间片完成之后,再次切换到另一个线程,如此反复,其间切换的速度很快,给人一种同时进行的错觉而已。
但在多线程中,往往会发生两个线程抢占资源的问题,所以我们需要防止这些资源访问的冲突。
C#提供线程同步机制来防止资源访问的冲突,其中主...
分类:
编程语言 时间:
2014-06-15 19:38:36
阅读次数:
293
上一篇介绍了MySQL源码中保护内存结构或变量的锁,这里开始介绍下MySQL事务中的表锁。注1: 在表锁的实现上面,使用【mutex+condition+queue】的结构实现并发,阻塞,唤醒的表锁功能。注2: 本文进行的一些实验,重要的配置项:1. autocommit=02. tx_isol.....
分类:
数据库 时间:
2014-06-15 09:36:39
阅读次数:
250