什么是互斥?

非 Y 不嫁゛ 提交于 2020-01-07 01:51:05

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

互斥体是一种经常用于解决多线程问题的编程概念。 我向社区提出的问题:

什么是互斥锁,你如何使用它?


#1楼

要了解MUTEX,首先需要知道什么是“竞争条件”,然后才会理解为什么需要MUTEX。 假设您有一个多线程程序,并且您有两个线程。 现在,您在作业队列中有一个作业。 第一个线程将检查作业队列,在找到作业后,它将开始执行它。 第二个线程还将检查作业队列,并发现队列中有一个作业。 因此,它也将分配相同的作业指针。 所以,现在发生了什么,两个线程都在执行相同的工作。 这将导致分段错误。 这是竞争条件的一个例子。

这个问题的解决方案是MUTEX。 MUTEX是一种锁,它一次锁定一个线程。 如果另一个线程想要锁定它,线程就会被阻塞。

这个pdf文件链接中的MUTEX主题非常值得一读。


#2楼

当您拥有多线程应用程序时,不同的线程有时会共享一个公共资源,例如变量或类似资源。 这个共享源通常无法同时访问,因此需要一个构造来确保一次只有一个线程正在使用该资源。

这个概念被称为“互斥”(短互斥),并且是一种确保在该区域内只允许一个线程,使用该资源等的方法。

如何使用它们是特定于语言的,但通常(如果不总是)基于操作系统互斥锁。

由于范例,有些语言不需要这种结构,例如函数式编程(Haskell,ML就是很好的例子)。


#3楼

相互排斥。 这是维基百科上的条目:

http://en.wikipedia.org/wiki/Mutual_exclusion

互斥的要点是同步两个线程。 当您有两个线程尝试访问单个资源时,一般模式是让第一个代码块尝试访问以在输入代码之前设置互斥锁。 当第二个代码块尝试访问时,它会看到互斥锁已设置并等待,直到第一个代码块完成(并取消设置互斥锁),然后继续。

如何实现这一目标的具体细节显然因编程语言而异。


#4楼

互斥是一种互斥的旗帜。 它充当一段代码的守门员,允许一个线程进入并阻止访问所有其他线程。 这可以确保所控制的代码一次只能被一个线程命中。 确保在完成后释放互斥锁。 :)


#5楼

当我在工作中进行激烈的讨论时,我会使用一只橡皮鸡,我会把它留在我的办公桌上。 持鸡的人是唯一被允许说话的人。 如果你不抓鸡,你就不会说话。 你只能表明你想要鸡肉并等到你说话之前就得到它。 讲完后,你可以把鸡还给主持人,主持人会把它交给下一个发言的人。 这可以确保人们不会互相交谈,也有自己的谈话空间。

用Mutex替换鸡和有线程的人,你基本上有互斥的概念。

当然,没有橡皮互补器这样的东西。 只有橡皮鸡。 我的猫曾经有过橡皮鼠,但他们吃了它。

当然,在你使用橡皮鸡之前,你需要问问自己,你是否真的需要在一个房间里有5个人,并且一个人在房间做自己的所有工作不仅容易。 实际上,这只是扩展了类比,但你明白了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!