角色模型对编写并发、分布式系统进行了高度抽象。它减轻了开发者必须对互斥锁与线程管理的负担,更容易编写出正确的并发与并行系统。早在1973 年 Carl Hewitt 发表的论文中定义了角色,但一直流行于Erlang 语言中...
分类:
编程语言 时间:
2014-10-24 16:55:05
阅读次数:
296
1 基础概念
信号量在创建时需要设置一个初始值,表示同时可以有几个任务可以访问该信号量保护的共享资源,初始值为1就变成互斥锁(Mutex),即同时只能有一个任务可以访问信号量保护的共享资源。
一个任务要想访问共享资源,首先必须得到信号量,获取信号量的操作将把信号量的值减1,若当前信号量的值为负数,表明无法获得信号量,该任务必须挂起在该信号量的等待队列等待该信号量可用;若当前信号量的值为...
分类:
其他好文 时间:
2014-10-23 12:35:07
阅读次数:
166
1 基础概念
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。
由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。
信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程...
分类:
其他好文 时间:
2014-10-23 10:45:39
阅读次数:
251
今天看到nginx用文件锁实现互斥的实现方案时,发现,unlink文件后还可需用fd,很是纳闷!于是搜索到此文,并自测了下,涨姿势了~分享给大家~原理: 每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。 当通过shell的t...
分类:
其他好文 时间:
2014-10-22 18:02:56
阅读次数:
237
实验二线程的实现和线程间的同步与互斥一、目的:1、了解在WINDOWS中线程的编程实现,掌握利用VC或DELPHI调用WINDOWS API建立线程。2、了解在WINDOWS中线程间同步与互斥的信号量的实现,并利用该原理实现在WINDOWS下模拟实现有关经典线程同步与互斥问题。二、内容:1、利用VC...
分类:
其他好文 时间:
2014-10-22 17:56:09
阅读次数:
149
在《effective java》中看的的知识点,在工作中确实遇到了~
关键字synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块。
同步并不是单单指线程之间的互斥。如果没有同步,一个线程的变化就不能被其他线程看到。同步不仅可以阻止一个线程看到对象处于不一致的状态之中, 它还可以保证进入同步方法或者同步代码块的每个线程,都看到由同一个锁保护的之前的所...
分类:
编程语言 时间:
2014-10-21 23:14:35
阅读次数:
300
在通信程序中,经常使用环形缓冲区作为数据结构来存放通信中发送和接收的数据。环形缓冲区是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。1、环形缓冲区的实现原理环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和...
分类:
其他好文 时间:
2014-10-21 19:22:46
阅读次数:
294
自旋锁内调用kmalloc或者copy_to_user之类的接口可能造成死锁。这类函数的实现内有睡眠操作,睡眠时产生了进程调度,新的进程内如果也使用了该自旋锁,就会导致死锁。这类问题非常普通,但很容易忽略;屏蔽的方式:1,使用get_free_page申请内存2,对资源使用引用计数保护3,使用互斥锁
分类:
其他好文 时间:
2014-10-21 13:44:04
阅读次数:
205
内容来自:http://blog.csdn.net/morewindows/article/details/7538247用的线程同步互斥机制——关键段、事件、互斥量、信号量。下面对它们作个总结,帮助大家梳理各个知识点。首先来看下关于线程同步互斥的概念性的知识,相信大家通过前面的文章,已经对线程同步...
分类:
编程语言 时间:
2014-10-21 11:43:33
阅读次数:
256
lock关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。class Program { static void Main(string[] args) { Thread t = new Thread(LockOb...