2016 - 2024

感恩一路有你

多线程互斥 多线程的同步和互斥有什么区别?

浏览量:2276 时间:2021-03-14 07:21:09 作者:admin

多线程的同步和互斥有什么区别?

例如:如果把整条道路看作一个过程,那么在道路中间用白色虚线隔开的车道就是过程中的线。

①这些线程(通道)共享进程(道路)的公共资源(土地资源)。

②这些线程(车道)必须依赖于进程(道路),也就是说,没有进程线程就不可能存在(就像离开道路一样,车道是没有意义的)。

③这些线程(车道)可以同时执行(你走你的路,我走我的路),也可以同步执行(有些车道在红绿灯亮时不允许前进或转弯,必须等待其他车道的车辆通过)。

④这些线程(车道)依赖于代码逻辑(红绿灯)来控制操作。一旦代码逻辑控制出错(死锁,多个线程同时争夺唯一的资源),那么线程就会陷入混乱。

5. 在这些线程(通道)中谁先运行是未知的,只有当线程刚刚就绪并分配给CPU时间片(红绿灯改变)时才知道。注意:由于用于互斥的信号量SEM与所有并发进程相关,因此称为公共信号量。公共信号量的价值反映了公共资源的数量。只要临界区位于P(SEM)和V(SEM)之间,就可以实现过程间的互斥。就像火车上的每节车厢只有一个厕所一样,车厢里的所有乘客都共享这一公共资源:厕所,因此乘客进入厕所必须相互排斥。只要把马桶放在P(SEM)和V(SEM)之间,就可以达到互斥的效果。

多个线程可以读一个变量,只有一个线程可以对这个变量进行写,到底要不要加锁?

下面简要说明以下原因:

锁定是因为操作不是原子的。让我们用操作一来解释它。看下面两个图。

我这个操作需要

看上面的第二个图,你能很清楚地理解这个过程吗?

锁定是为了确保上述三个步骤是原子操作。

回到问题上来,只有一个线程要写,没有竞争,所以不需要锁定。

但是,如果你看第一张图片,因为主内存和本地内存的存在

在一个线程写入后,其他线程无法立即看到它。这就是可见性问题。

添加volatile关键字后,它将在操作后强制工作内存和主内存同步,以确保其他线程可以立即看到它。

在学JAVA的时候对io,多线程一知半解,是继续往后学到做项目的时候弄明白呢还是刚开始就要弄懂它们?

多线程是Java中的一个常见问题,也是一个很难理解的部分。

现在您可以学习多线程。多线程的内容有很多,其中有些还与底层有关。现在你可以试着去理解。当你有一点知识的时候,你可以试着寻找信息。你也可以先录下来,然后再理解。内容很多。当项目被应用时,你可能不知道从哪里开始并且花费更多的时间。

总之,学习还是循序渐进的,一步一步的理解。

多线程互斥 线程同步和互斥几种实现方法 多线程互斥机制

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。