转自: http://www.cnblogs.com/memewry/archive/2012/08/22/2651696.html 一、进程/线程间同步机制。 临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件( ...
分类:
编程语言 时间:
2017-03-30 10:23:02
阅读次数:
332
类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻只允许一个线程存取资源或代码区。临界区在控制一次只能有一个线程修改数据或其它的控制资源时非常有用。例如在链表中增加一个节点就中允许一次一个线程进行。通过使用CCriticalSection对象来控制链表,就可 ...
分类:
其他好文 时间:
2017-03-24 17:32:05
阅读次数:
197
1.原子性的操作: CAS --CompareAndSwap(),指的是多个线程进入临界区域中,让多个线程在临界区域上自由的竞争,最后能够保证有一个线程能够胜出,其他没有竞争到的线程可以再一次尝试。最终临界区域上的所有线程都能够线程安全性的完成,这种方式,也叫无锁的方式,在之前的Synchroniz ...
分类:
编程语言 时间:
2017-03-23 01:23:56
阅读次数:
256
锁的简单应用 用lock来保证原子性(this.count++这段代码称为临界区) 什么是原子性,就是不可分,从头执行到尾,不能被其他线程同时执行。 可通过CAS来实现原子操作 CAS(Compare and Swap): CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间 ...
分类:
其他好文 时间:
2017-03-19 17:05:24
阅读次数:
290
进程间通信简单的说有三个问题,第一个问题是:一个进程如何把信息传递给另一个,第二个问题是:要确保两个或者更多的进程在互动中不会出现交叉(即是进程互斥问题),第三个问题是:进程间同步问题、 四种进程或者线程同步互斥的控制方法 1):临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制 ...
分类:
系统相关 时间:
2017-03-13 11:31:10
阅读次数:
342
两种锁的加锁原理 互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。 自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。 两种锁的区别 互斥锁的起始原始开销要高于自旋锁,但是基本是一劳永逸,临界区 ...
分类:
其他好文 时间:
2017-02-14 13:58:29
阅读次数:
152
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的 ...
分类:
编程语言 时间:
2017-02-13 15:35:49
阅读次数:
232
恢复内容开始 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个类始终都能变现出正确的行为,那么这个类(对象或方法)就是线程安全的。 synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区"。 下面看一段代码: t3 count = 2t5 count ...
分类:
编程语言 时间:
2017-02-09 10:52:59
阅读次数:
143
访问共享资源的代码区块叫“临界区”,临界区需要以某种互斥机制加以保护:自旋锁、信号量等。互斥访问:一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问。 信号量:在Liunx中的信号量是一种睡眠锁。假如进程A先持有信号量F,然后进程B试图获取已经被进程A持有的信号量F时(假如信号量F资源值为1 ...
分类:
系统相关 时间:
2017-01-19 02:50:52
阅读次数:
191
// 临界区.cpp : 定义控制台应用程序的入口点。// #include "stdafx.h"#include<windows.h>#include<iostream>using namespace std; DWORD g_cnt1;DWORD g_cnt2;BOOL g_bContinue ...
分类:
其他好文 时间:
2017-01-16 22:27:02
阅读次数:
194