一、基础1、多任务在单个cpu不能并行,只能是并发,任务来回切。2、临界区:对资源的访问顺序敏感则存在竞态条件。竞态条件发生区叫临界区,写操作产生竞态条件,需要同步。阻塞:仅单线程使用;非阻塞:允许多线程同时进入临界区。3、死锁:由于竞争资源或彼此通信导致阻塞,..
分类:
编程语言 时间:
2017-01-16 14:38:54
阅读次数:
489
ReentrantLock 两个两个比较大的特性。1.中断2.定时3.公平锁。 ReadWriteLock 读读不互斥读写互斥写写互斥。Condition 类似于 Object.wait()和Object.notify()和synchronized配套使用 CountDownLatch lanchi ...
分类:
其他好文 时间:
2017-01-10 19:32:03
阅读次数:
255
一、线程安全问题 当多个线程访问某一个类的时候,这个类都能表现出正确的行为,那么这个类就是线程安全的。 synchronized可以加在任意对象及方法上加锁,加锁的这段代码就成为互斥区或者临界区 下面是关于线程安全的一个小示例,关键点就在synchronized这个词上 二、多个线程多把锁 多个线程 ...
分类:
编程语言 时间:
2017-01-08 12:41:45
阅读次数:
218
要求: 子线程输出的线程序号不能重复。(主线程和子线程需要同步) 全局变量g_count的输出必须递增。(子线程之间需要互斥) 1,用临界区CRITICAL_SECTION来解决子线程之间的互斥 2用事件解决主线程和子线程的同步问题 //CreateEvent创建一个事件 HANDLE Create ...
分类:
编程语言 时间:
2017-01-01 23:48:23
阅读次数:
310
多线程使用循环队列其实也不是个很难的东西,主要就是要避免两个线程同时操作队列,加个锁就可以很容易的实现,win32中用临界区就可以做到。 代码: 代码中,一个线程向队列中写数据,另一个从队列中读数据,队列的结构体有成员CRITICAL_SECTION cs ; 用来防止两个队列同时对队列进行访问。 ...
分类:
编程语言 时间:
2016-12-30 22:04:49
阅读次数:
364
1.在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫”临界区”怎么解决呢:使用同步的机制对临界区进行保护同步的两种方式:同步块和同步方法对于同步来说都是使用synchronized方法每一个对象都有一个监视器,或者叫做锁。java用监视器机制实现..
分类:
编程语言 时间:
2016-12-29 23:35:20
阅读次数:
344
本篇继续介绍WaitHandler类及其子类 Mutex,ManualResetEvent,AutoResetEvent的用法。.NET中线程同步的方式多的让人看了眼花缭乱,究竟该怎么去理解呢?其实,我们抛开.NET环境看线程同步,无非是执行两种操作:一是互斥/加锁,目的是保证临界区代码操作的“原子 ...
分类:
编程语言 时间:
2016-12-28 01:22:08
阅读次数:
347
当出现竞态条件时候,即在同一个时刻只有一个线程可以进入临界区,需要使用同步。 常见的同步原语有两种:锁/互斥,信号量。 锁是最简单,最低级的机制。 首先看一个不使用锁时候的多线程示例: 输出结果1: Thread-1 starting at Tue Dec 20 23:12:03 2016Threa ...
分类:
编程语言 时间:
2016-12-21 02:01:11
阅读次数:
280
在多任务实时系统中,常常需要在任务之间或者中断与任务之间进行通信,这就产生了同步与通信机制。 同步可分为两种: ①资源同步:避免两个及以上任务对同一个资源的同时操作 ②活动同步:确定任务的活动是否到达一个确定状态 通信的目的主要是以下几点: ①让一个任务控制另一个任务 ②在任务间传递信息(通常为状态 ...
分类:
其他好文 时间:
2016-12-13 23:08:57
阅读次数:
224
临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别 TRtlCriticalSection 是一个结构体,在windows单元中定义; 是InitializeCriticalSection,EnterCriticalSection,Leav ...
分类:
其他好文 时间:
2016-12-11 15:29:46
阅读次数:
139