同步和互斥
- 互斥显而易见就是不能有两个或多个进程访问临界区
- 但是进程想要合作,例如生产者和消费者问题,如果有一个数据池,生产者和消费者想要同时访问的的话,也是可以的,只要做好同步就可以了。例如可以用一个变量full记录数据池里数据的量,另一个变量empty记录数据池里“空”的量
在进行写操作的时候的命令是:
P(empty)
...
V(full)
在进行读操作的时候的命令是:
P(full)
...
V(empty)
而多个线程同时写的问题,则要用互斥来解决了
死锁
- 原因和必要条件
产生死锁的基本原因是多个进程竞争资源与进程推进顺序不当
永久性资源产生死锁有4个必要条件:互斥条件、请求和保持条件、不剥夺条件和环路等待条件 - 解除死锁
从系统中解除或者挂起一些死锁线程
数据库并发操作常见问题
- 丢失更新
- 不可重复读
在两次读同一数据项A时却读出了不同的值 - 读脏数据
把未提交的随后被撤销的数据称为“脏数据”
X锁和S锁
- X锁
排他型封锁,不允许其他事务T再对该数据加任何类型的锁,并发度较低。 - S锁
共享型封锁,加S锁后可以再加S锁,但是决不允许任何事务对该数据加X锁。获准S锁的事务只能读数据,不能更新数据,若要更新,则先要把S锁升级为X锁,另外,由于S锁只允许读数据,因此解除S锁的操作不必非要合并到事务的结束操作中去,可以随时根据需要解除S锁。
事务
- 定义
事务(transaction)是构成单一逻辑工作单元的操作集合,不论发生何种情况,DBS必须保证事务能正确、完整地执行。
事务相当于操作系统环境中的“进程”概念,一个事务由应用程序中的一组操作序列组成,在程序中,事务以BEGIN TRANSACTION语句开始,以COMMIT语句或ROLLBACK语句结束。 - ACID
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)