这个需求是在软件设计过程常见的加锁。学计算机的同学都应该知道,这个是在《计算机操作系统》课程上有这个知识点。主要要考虑的是进程的同步,也就是进程对资源的互斥访问。OK,用程序说话吧!OK,代码还不算很多吧!这个不要记代码,重要的是要理解每一个函数的意思,以及每一个语句的意思。
分类:
Web程序 时间:
2014-05-27 01:53:23
阅读次数:
524
HttpContext.Current.Application:整个应用程序都可以共享的,当然存储的时候应该加锁的。HttpRuntime.Cache与HttpContext.Current.Cache:二者其实是指向的同一对象,区别在于HttpContext与HttpRuntime的实现上。Htt...
分类:
其他好文 时间:
2014-05-19 22:16:56
阅读次数:
298
Linux提供两种信号量:
1、内核信号量,由内核控制路径使用
2、System V IPC信号量,由用户态进程使用
从本质上说,它们实现了一个加锁原语,即让等待者睡眠,直到等待的资源变为空闲。
信号量
内核信号量类似于自旋锁,因为当锁关闭着的时候,它不允许内核控制路径继续运行。然而,当内核内核控制路径试图获取内核信号量所保护的忙资源时,相应的进程被挂起。只有在资源被释放时,进程才再次变...
分类:
其他好文 时间:
2014-05-18 18:43:39
阅读次数:
294
餐桌上的多线程问题生产者和消费者模型设想有一天你和一群朋友去餐馆吃饭,这是个典型的同步例子,你和你的朋友们共享着餐桌这个资源。想象一下,当你举起筷子准备夹菜的时候,却发现菜碟子被人端走了~这正是同步要解决的问题,必须保证在某人夹菜的时候,其他人不能把菜盘子端走。Java中使用加锁的机制,使用Sync...
分类:
编程语言 时间:
2014-05-15 11:09:46
阅读次数:
367
之前对于文件的操作通常在一个进程中完成,最近需要在两个进程中对同一个文件进行操作。故想到了文件锁。Linux下可以使用flock()函数对文件进行加锁解锁等操作。简单介绍下flock()函数:
表头文件 #include 定义函数 int flock(int fd,int operation);.....
分类:
系统相关 时间:
2014-05-15 09:52:13
阅读次数:
415
有时一个互斥量是不够的:
比如:
当多个线程同时访问一个队列结构时,你需要2个互斥量,一个用来保护队列头,一个用来保护队列元素内的数据。
当为多线程建立一个树结构时,你可能需要为每个节点设置一个互斥量。
同时使用多个互斥量会导致复杂度的增加
最坏的情况就是死锁的发生,即两个线程分别锁住一个互斥量而等待对方的互斥量。
多互斥量可能导致死锁:
如果...
分类:
编程语言 时间:
2014-05-13 16:32:03
阅读次数:
533
OSIP在定义多线程的时候,需要添加锁,如果没有使用到多线程,就没有使用到锁的功能。文件代码:osip_fifo.h/***Structureforreferencingafifo.*@varosip_fifo_t*/typedefstructosip_fifoosip_fifo_t;/***Structureforreferencingafifo.*@structosip_fifo*/structosip_fifo{#if..
分类:
编程语言 时间:
2014-05-10 04:10:53
阅读次数:
640
两种锁的加锁原理互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。两种锁的区别互斥锁的起始原始开销要高于自旋锁,但是基本是一劳永逸,临界区持锁时间...
分类:
其他好文 时间:
2014-05-09 04:58:58
阅读次数:
297
比如下单的时候修改数据分离锁,对单个订单加锁在一个实例里面可以保证修改串行执行
分类:
其他好文 时间:
2014-05-08 13:43:34
阅读次数:
208
1.同步容器,同步容器包括Vector和HashTable,是早期jdk的一部分。另一部分是同步包装类,以Collections.synchronizedxxx的工厂方法创建。
2.同步容器虽然是线程安全的,但是对于复合操作,有时你可能需要加上额外的客户端加锁进行保护,即对于使用这些容器的客户端代码,如果存在复合操作,还是可能存在风险。
3.例如check-and-act操作、循环中的元素操作...
分类:
编程语言 时间:
2014-05-07 08:33:56
阅读次数:
423