互斥是一种编程概念,经常用于解决多线程问题。我对社区的问题是:
什么是互斥锁,如何使用它?
互斥是一种编程概念,经常用于解决多线程问题。我对社区的问题是:
什么是互斥锁,如何使用它?
当前回答
在c#中,常用的互斥量是Monitor。类型是'System.Threading.Monitor'。它也可以通过'lock(Object)'语句隐式使用。它的一个使用示例是在构造Singleton类时。
private static readonly Object instanceLock = new Object();
private static MySingleton instance;
public static MySingleton Instance
{
lock(instanceLock)
{
if(instance == null)
{
instance = new MySingleton();
}
return instance;
}
}
使用私有锁对象的lock语句创建了一个临界区。要求每个线程等待前一个线程完成。第一个线程将进入该节并初始化实例。第二个线程将等待,进入该节,并获得初始化的实例。
静态成员的任何类型的同步都可以类似地使用lock语句。
其他回答
To understand MUTEX at first you need to know what is "race condition" and then only you will understand why MUTEX is needed. Suppose you have a multi-threading program and you have two threads. Now, you have one job in the job queue. The first thread will check the job queue and after finding the job it will start executing it. The second thread will also check the job queue and find that there is one job in the queue. So, it will also assign the same job pointer. So, now what happens, both the threads are executing the same job. This will cause a segmentation fault. This is the example of a race condition.
这个问题的解决方案是互斥。互斥锁是一种一次锁定一个线程的锁。如果另一个线程想要锁定它,那么这个线程就会被阻塞。
这个pdf文件链接中的MUTEX主题非常值得一读。
当您有一个多线程应用程序时,不同的线程有时会共享一个公共资源,例如变量或类似的资源。这个共享源通常不能同时访问,因此需要一个构造来确保一次只有一个线程在使用该资源。
这个概念被称为“互斥”(简称互斥),是一种确保只有一个线程被允许在该区域内使用该资源等的方法。
如何使用它们是特定于语言的,但通常(如果不是总是)基于操作系统互斥。
由于范式的原因,一些语言不需要这个构造,例如函数式编程(Haskell和ML就是很好的例子)。
互斥。这是维基百科上的词条。
互斥锁的作用是同步两个线程。当有两个线程试图访问一个资源时,一般的模式是让第一个代码块在进入代码之前尝试访问设置互斥量。当第二个代码块尝试访问时,它看到互斥锁已设置,并等待到第一个代码块完成(并取消互斥锁),然后继续。
如何实现这一点的具体细节显然因编程语言的不同而有很大差异。
这里有一些很好的答案,这里有另一个很好的类比来解释互斥是什么:
考虑一下带钥匙的单人厕所。当有人进来时,他们拿着钥匙,厕所就有人了。如果有人要上厕所,他们需要排队。上完厕所的人把钥匙交给下一个排队的人。说得通,对吧?
将故事中的厕所转换为共享资源和互斥锁的密钥。带上厕所的钥匙(买一把锁)你就可以使用它了。如果没有钥匙(锁上了),你就得等。当钥匙被人归还(打开锁)时,你现在就可以自由地获得它了。
互斥锁是一个互斥标志。它充当了一段代码的门卫,允许一个线程进入,并阻止对所有其他线程的访问。这样可以确保被控制的代码一次只被一个线程访问。只要确保在完成后释放互斥锁即可。:)