今天看群里在讨论数据库死锁的问题,也一起研究了下,查了些资料在这里总结下。所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,...
分类:
数据库 时间:
2014-08-14 13:41:58
阅读次数:
280
在进行多线程编程时,我们总会遇到全局变量和数据结构的问题,这是多线程之间进行通信的问题。如果多个线程同时读写一个全局变量,那么会造成竞争或者出错。为了解决这一问题,我们需要对全局数据进行,使用互斥量实现锁的机制,当某个线程在某个操作前进行了加锁,那么某个操作只能在这个线程进行,直至将锁去除,相当于在这里将多线程的并行变成了串行。本文重点学习如何使用互斥量进行全局数据的同步,分为三个部分,第一部分给...
分类:
其他好文 时间:
2014-08-13 19:02:47
阅读次数:
130
@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。Objective-C...
分类:
其他好文 时间:
2014-08-13 12:20:36
阅读次数:
261
死锁:
在多线程竞争使用共享资源的情况下,就有可能出现死锁的情况。比如,当一个线程等待另一个线程所持有的锁时,那个线程又可能在等待第一个线程所持有的锁。此时,这两个线程会陷入无休止的相互等待状态,这种情况就称为死锁。
产生死锁的四个必要条件:
1、互斥条件。进程对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占有。
2、请求和保持条件。当进程因请求资源而阻...
分类:
编程语言 时间:
2014-08-13 01:09:24
阅读次数:
217
死锁的四个条件互斥占用等待非剥夺循环等待死锁的解决方案死锁预防间接预防:防止前三个条件中的任何一个的发生直接预防:防止循环等待的发生死锁避免进程启动拒绝:不启动任何一个可能发生死锁的进程资源请求拒绝:拒绝可能发生死锁的资源请求死锁检测死锁检测算法恢复策略:一旦检测到死锁,就要立即恢复。
分类:
其他好文 时间:
2014-08-12 00:29:43
阅读次数:
189
X86处理器上用户层到内核层的转换要花费600个CPU指令周期 临界区(关键代码段)不是内核对象 但当访问被占用的资源时会使用内核资源 功能同互斥但不可跨进程 (以上引用自:http://www.dewen.org/q/9561) WIN32内核对...
分类:
编程语言 时间:
2014-08-11 12:16:02
阅读次数:
243
在一个群里看到,码代码除了主线外,还是一个和各种toollist抗争的过程。和一个同学聊到,工资只是零花钱,一定要习得赚取生活费的技能。被一个同学问到,两个方向或者两个问题的冲突,除了资源互斥,还有时间线上的不可逆转冲突。这几天跟中了邪似的,每次我想做正事的时候,例如修改程序,看游戏代码,总是会被意...
分类:
其他好文 时间:
2014-08-10 18:08:50
阅读次数:
162
上一篇介绍了因为子表过多,导致innodb crash的情况,但crash的原因是long semaphore waits。long semaphore waits又为何物?背景:Innodb使用了mutex和rw_lock来保护内存数据结构,同步的机制要么是互斥,要么是读写阻塞的模式, Innod...
分类:
数据库 时间:
2014-08-09 22:59:39
阅读次数:
776
1. 介绍生产者消费者问题属于有界缓冲区问题。我们现在讲述多个生产者向一个缓冲区中存入数据,多个生产者从缓冲区中取数据。共享缓冲区作为一个环绕缓冲区,存数据到头时再从头开始。2. 实现我们使用一个互斥量保护生产者向缓冲区中存入数据。由于有多个生产者,因此需要记住现在向缓冲区中存入的位置。使用一个互斥...
分类:
其他好文 时间:
2014-08-08 17:55:06
阅读次数:
271
总结下我所了解的ios下的锁:1. 互斥锁@synchronized,@synchronized块隐式的添加一个异常处理例程来保护代码。该处理例程会在异常抛出的时候自动的释放互斥锁。这意味着为了使用@synchronized指令,你必须在你的代码中启用异常处理。NSLockNSRecursiveLo...
分类:
移动开发 时间:
2014-08-08 15:36:56
阅读次数:
289