为什么多个并行线程不能同时获取到同一把锁?

来源:11-3 主要内容

林就远

2020-12-01

老师,您好,我有两个问题想请教您一下:

  1. 为什么多个并行线程不能同时获取到同一把锁?
    为什么会提出这个问题呢,是因为我今天仔细想了下。多线程并行执行操作同一共享资源,那么可能会产生线程安全问题。所以这里我们就要用到同步机制,给操作同一共享资源的部分代码进行加锁处理。
    可是我能不能这样理解:锁本身就是多个线程之间的共享资源,只有拿到了这把锁才可以进入同步逻辑区域。那么如何保证多线程在并行的情况下,只有一个线程才能拿到这个“共享资源”呢?会不会出现多个线程同时得到这把锁?还是说我把锁看成是多个线程的“共享资源”是有问题的?

  2. 多个线程等待同一把锁,线程获取到锁的机制是什么?
    5个线程通过加锁同步机制执行,一个线程获取到了锁,执行完相应代码,释放锁,供其它四个线程获取。那么其它四个线程获取锁的机制是什么?cpu的随机调度吗?还是有相关算法的?

写回答

1回答

悟空

2020-12-01

最终到获取同一个锁的时候,都是串行,所以不会出现大家都获得。

有多种算法,你可以搜索一下,线程调度算法。

0
2
悟空
回复
林就远
通过CPU总线等的通信
2020-12-02
共2条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程