前几篇分析了一下AQS的原理和实现,这篇拿Semaphore信号量做例子看看AQS实际是如何使用的。
Semaphore表示了一种可以同时有多个线程进入临界区的同步器,它维护了一个状态表示可用的票据,只有拿到了票据的线程尽可以进入临界区,否则就等待,直到获得释放出的票据。Semaphore常用在资源池中来管理资源。当状态只有1个0两个值时,它退化成了一个互斥的同步器,类似锁。
...
分类:
编程语言 时间:
2014-11-11 14:31:26
阅读次数:
216
传统的进程间通信的方式有大致如下几种:(1) 管道(PIPE)(2) 命名管道(FIFO)(3) 信号量(Semphore)(4) 消息队列(MessageQueue)(5) 共享内存(SharedMemory)(6) SocketJava如何支持进程间通信。我们把Java进程理解为JVM进程。很明...
分类:
编程语言 时间:
2014-11-10 19:30:30
阅读次数:
219
Semaphore用于保存当前可用许可的数量。是通过共享锁实现的。根据共享锁的获取原则,Semaphore分为"公平信号量"和"非公平信号量"。"公平信号量"和"非公平信号量"的释放信号量的机制是一样的!不同的是它们获取信号量的机制:线程在尝试获取信号量许可时,对于公平信号量而言,如果当前线程不在队...
分类:
编程语言 时间:
2014-11-10 09:47:25
阅读次数:
241
Semaphore是JDK1.5之后出的一个实现同步的另一个方式。Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程数。假如你有3个资源,有10个线程要使用该资源,同时只能有3个线程使用,所以其余7线程在等待,只要3个中任意一个释放资源,那么7个线程中的一个就可以使用了。
另外,7个线程等待可以使随机获取机会,也可以是按...
分类:
编程语言 时间:
2014-11-09 15:22:35
阅读次数:
234
共享内存同意两个或多个进程共享一给定的存储区,由于数据不须要来回复制,所以是最快的一种进程间通信机制。共享内存能够通过mmap()映射普通文件(特殊情况下还能够採用匿名映射)机制实现,也能够通过系统V共享内存机制实现。应用接口和原理非常easy,内部机制复杂。为了实现更安全通信,往往还与信号量等同步...
分类:
系统相关 时间:
2014-11-07 18:32:40
阅读次数:
183
一、什么是优先级翻转问题 所谓优先级翻转问题(Priority Inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得....
分类:
编程语言 时间:
2014-11-07 13:05:28
阅读次数:
89
VxWorks进程间通信2 -- 信号量一.信号量的概念是实现任务互斥、同步操作的主要机制。VxWorks提供的信号量经过了高度优化,在所有任务间通信机制中,速度最快。二.信号量的分类Binary Semaphores(二进制):完成互斥、同步操作的最佳方式;速度最快,最常用。Mutual Excl...
分类:
系统相关 时间:
2014-11-07 11:04:12
阅读次数:
227
ngx_master_process_cycle()函数,这个函数会启动工作进程干活,并且会处理信号量,处理的过程中会杀死或者创建新的进程,具体流程如下
a) 阻塞所有nginx关心的信号;
b) 设置进程的title(如果你用ps –aux来查看就可以分清master与worker进程,这就是title的作用。);
c) 按照ngx_core_conf_t中worker_...
分类:
系统相关 时间:
2014-11-06 22:01:51
阅读次数:
394
通信是一个比较重要的概念。只要存在多于一个执行单元(并发),就有可能存在通信。linux上的并发主要分为多进程(任务)和多线程。linux也提供了多个通信机制来支持不同进程或者不同线程之间的信息传递。通信方式主要包括管道,套接字,消息队列,共享内存,信号量,互斥量,信号(如kill -0检测进程是否...
分类:
系统相关 时间:
2014-11-06 20:02:42
阅读次数:
200
前面《秒杀多线程第四篇一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经...
分类:
编程语言 时间:
2014-11-06 12:50:59
阅读次数:
273