多个执行线程共享一个资源的情形是最常见的并发编程情景之一。在并发应用中常常遇到这样的情景:多个线程读或者写相同的数据,或者访问相同的文件或者数据库连接。为了防止这些共享资源可能出现错误或者数据不一致,人们引入了临界区(criticalsection)概念。临界区是一个用以..
分类:
编程语言 时间:
2016-06-07 16:39:31
阅读次数:
314
利用critical section 和 Mutex两种不同的线程同步的方法实现生产者消费者问题。生产者线程要能够对一个计数器进行增的操作,并且将其输出在控制台上,消费者线程能够对这个计数器进行减的操作,并将其输出在控制台上。两种线程都共享一个计数器。
其中增、减计数器的数我设置为1~6随机。测试两种方法的对比,用网上整理出的一张表如下1、使用CriticalSection 方法时,有一个临界区c...
分类:
编程语言 时间:
2016-06-03 19:45:24
阅读次数:
226
互斥锁试图将想进入临界区的所有线程都阻塞住,但是有时候该临界区会涉及由这些线程共享的一个或多个数据的访问或更新,这时候我们就需要用到读写锁。系统读写锁的分配规则:
(1)只要有没有线程持有给定的读写锁用于写,那么任意数量的线程可以持有该读写锁用于读。(系统规定写锁优先,但是可以更改为读锁优先)
(2)仅当没有线程持有某个读写锁用于读或用于写时,才能分配该读写锁用于写。读写锁用于读称为共享锁,读写...
分类:
系统相关 时间:
2016-05-31 10:39:18
阅读次数:
272
一、概述 信号量是操作系统提供的一种协调共享资源访问的方法。和用软件实现的同步比较,软件同步是平等线程间的的一种同步协商机制,不能保证原子性。而信号量则由操作系统进行管理,地位高于进程,操作系统保证信号量的原子性。 信号量是跟锁机制在同一个层次上的编程方法。 管程是为了解决信号量在临界区的PV操作上 ...
分类:
其他好文 时间:
2016-05-30 21:22:33
阅读次数:
378
1、互斥锁(量)和条件变量默认情况下互斥锁和条件变量用于线程间同步,若将它们放在共享内存区,也能用于进程间同步。1.1 互斥锁1、概述:
互斥锁(Mutex,也称互斥量),防止多个线程对一个公共资源做读写操作的机制,以保证共享数据的完整性。用以保护临界区,以保证任何时候只有一个线程(或进程)在访问共享资源(如代码段)。保护临界区的代码形式:lock_the_mutex(...);
临界区
unlo...
分类:
其他好文 时间:
2016-05-30 14:47:31
阅读次数:
246
1.原子操作 2.临界区概述 临界区:进程中访问临界资源的一段需要互斥执行的代码。 进入区:检查可否进入临界区的一段代码,如可进入,设置相应“正在访问临界区”标志。 退出区:清除“正在访问临界区”标志。 3.临界区访问规则 空闲则入:没有进程在临界区时,任何进程可进入。 忙则等待:有进程在临界区时, ...
分类:
其他好文 时间:
2016-05-30 08:46:13
阅读次数:
180
概念 linux信号量:允许多个线程同时进入临界区,可以用于进程间的同步。 和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区。 所在头文件:semaphore.h 主要函数 初始化函数 int sem_init(sem_t *sem, int pshared, unsigned int ...
分类:
系统相关 时间:
2016-05-29 21:26:47
阅读次数:
290
1、首先确定一点:同步安全,异步不安全。 2、结合实例,针对下面的使用场景:妈妈做蛋糕给儿子吃。 3、需求分析: (a)蛋糕的数量是共享数据,应该放入临界区。 (b)妈妈做蛋糕的时候,儿子不能吃;儿子吃蛋糕的时候,妈妈不能做。 (c)假设儿子很饿,妈妈做一个,儿子吃一个,妈妈做好一个后,等待儿子去吃 ...
分类:
编程语言 时间:
2016-05-28 19:09:57
阅读次数:
146
非阻塞型同步 (Non-blocking Synchronization) 简介
如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。
阻塞型同步是指当一个线程到达临界区时,因另外一个线程已经持有访问该共享数据...
分类:
系统相关 时间:
2016-05-27 12:36:27
阅读次数:
266
多线程一直是短板,整理相关知识方便查询 临界区(Critical Section) 临界区是一段供线程独占式访问的代码.在任意时刻,若有一个线程正在访问该代码段,如果其他所有试图访问的线程都将被挂起,直到访问的线程离开该代码段才可进入,保证线程安全. 适用于控制数据访问. 因其线程所有权其可以用于线 ...
分类:
编程语言 时间:
2016-05-26 14:46:57
阅读次数:
169