原因:请求数多时对共享资源的并发访问,产生竞争。
例如:
- 操作系统,进程和线程对CPU资源的竞争获取
- 生产者-消费者问题,比如队列
- 读者-作者问题
- 哲学家进餐问题
- 客服分配问题,限制每个客服最多服务多少个用户,多余的用户只能排队
- 线程池,比如Web容器的线程池
- 秒杀,抢票,比如:购物,秒杀,买火车票,飞机票,电影票等,其中商品和票本身都是竞争的资源。
解决并发的工具:
- 操作系统,信号量PV操作实现进程之间的互斥和同步。
Java语言
- synchronized关键字
- concurrent包工具类,比如:ConcurrentHashMap,ArrayBlockingQueue, Lock,信号量
死锁问题
- 概念:一个进程集合中,每个进程都在等待其他进程占用的资源
- 死锁预防:死锁的必要条件:互斥、请求和保持、不剥夺、环路等待。
- 死锁避免,将系统状态区分为安全状态和不安全状态,为一组进程排序并能最大限度合理的分配资源成为安全状态。
- 死锁检测和解除:进程-资源分配图检测,剥夺死锁进程资源或者撤销死锁进程。
时间: 2024-10-25 22:26:14