初次接触死锁的概念是大学的一门课程《操作系统原理》中描述的“哲学家进餐”问题。操作系统中,由于各个进程共享系统资源而可能出现死锁问题。同样java多线程环境下,也存在资源共享导致的死锁问题。当一组java线程发生死锁时,程序有可能就此阻塞,而无法正常结束。Java应用程序中,我们使用加锁机制来确保线程的安全,但是如果过度地使用加锁,可能导致锁顺序死锁问题。
整理《java并发编程实...
分类:
编程语言 时间:
2015-04-17 11:33:25
阅读次数:
172
先说说线程
在多线程中,为了保证共享资源的正确性,我们常常会用到线程同步技术.
将一些敏感操作变成原子操作,保证同一时刻多个线程中只有同一个线程在执行这个原子操作。
我最常用的是互斥锁,也称独占锁。其次还有读写锁,信号量,条件变量等。
除此之外,我们在进程间通信时会用到信号,向某一个进程发送信号,该进程中设置信号处理函数,然后当该进程收到信号时,执行某些操作。
其实在线程中,也可...
分类:
编程语言 时间:
2015-04-16 17:34:25
阅读次数:
217
虽然 NSThread 能够实现多线程编程,但是需要自己去管理生命周期,还要考虑线程同步,加锁等问题.就会造成性能上的开销.NSOpreation 和NSOpreationQueue就可以实现多线程编程,不用考虑线程的生命周期,同步,加锁等问题.操作对象和操作队列步骤:1.先把你要执行的任务,封装到...
分类:
其他好文 时间:
2015-04-16 12:12:53
阅读次数:
96
0。Redis系列-安装部署维护篇1。Redis系列-远程连接redis并给redis加锁2。Redis系列-存储篇string主要操作函数小结3。Redis系列-存储篇list主要操作函数小结4。Redis系列-存储篇set主要操作函数小结5。Redis系列-存储篇hash主要操作函数小结6。使用...
分类:
其他好文 时间:
2015-04-15 23:19:11
阅读次数:
145
事件驱动和状态转移,在很大程度上保证了大型系统的顺利推进。状态转移有如下好处:
状态转移图是可以生成的。在讨论某个功能的时候,可以直接对着图进行讨论
某个状态转移图里面,通过加锁、生产者/消费者模式等方法,可以保证一个时间点只有一个状态转移,进而保证状态的正确性
在进行UT(单元测试)的时候,只需要对每一条转移路径进行测试就好啦
Hadoop也大量采用了这种方法,如MapReduce的状态转移,NM...
分类:
其他好文 时间:
2015-04-15 13:40:15
阅读次数:
178
比如上边的map里套map 定义变量为data,例如组队副本 npc 为1 下有众多房间 即Map> ,处于多线程下,一个线程在 npc为1的下边建一个房间,房间id为1即Map> ,这时候另外一个线程同时也要在 npc为1下建一个房间id为2的房间 即 Map> ,那我代码里肯定是 先 rooms...
分类:
其他好文 时间:
2015-04-13 22:47:49
阅读次数:
190
场景:一个商品有库存,下单时先检查库存,如果>0,把库存-1然后下单,如果0,然后都会执行update),所以需要加锁,InnoDB支持通过特定的语句进行显示加锁:select...lock in share modeselect...for udpateselect quantity from p...
分类:
其他好文 时间:
2015-04-13 00:06:04
阅读次数:
726
很神奇的方式,加锁。让你们一个个通过,不要急,后面的排队,买馒头,唉,那个谁,叫你别急嘛,你看看你。
//
// ViewController.m
// 线程安全
//
// Created by wangqian on 15/4/11.
// Copyright (c) 2015年 wangqian. All rights reserved.
//
#impo...
分类:
移动开发 时间:
2015-04-12 09:17:01
阅读次数:
141
目录[-]综述信号量与互斥锁Completions 机制自旋锁其他的一些选择不加锁算法原子变量与位操作seqlock(顺序锁)读取-拷贝-更新(RCU)小结综述在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争。首先什么是并发与竟态呢?并发(c...
分类:
系统相关 时间:
2015-04-11 22:21:37
阅读次数:
307
1. 线程的同步与互斥 1.1. 线程的互斥 在Posix Thread中定义了一套专门用于线程互斥的mutex函数。mutex是一种简单的加锁的方法来控制对共享资源的存取,这个互斥锁只有两种状态(上锁和解锁),可以把互斥锁看作某种意义上的全局变量。为什么需要加锁,就是因为多个线程共用进程的资源,要...
分类:
编程语言 时间:
2015-04-11 17:41:52
阅读次数:
239