正确使用互斥锁

时间:2011-04-24 11:51:55

标签: c mutex

什么数据类型是互斥锁?

我想将int设置为互斥锁。

我看到锁定设置为整数并且互斥锁被声明为pthread_mutex_t mtx,其中一个设置互斥锁的数据类型或将互斥锁连接到变量?

2 个答案:

答案 0 :(得分:5)

我认为你误解了互斥体是如何工作的。它们没有类型(显然不是pthread_mutex_t)。

通过使操作资源的线程在需要对该资源进行操作时锁定相同的互斥锁,可以使用它们来保护共享资源。

然后会发生的是,由于一次只有一个线程可以锁定互斥锁,因此其他尝试访问共享资源的线程将被阻止。

一旦获得锁定的线程已经完成使用该资源,它必须解锁互斥锁 - 否则其他线程将永远阻塞。

您使用此互斥锁“保护”的资源的确切性质取决于您。它可能是一个简单的int,一个复杂的结构,一些硬件资源......您有责任确保从代码中对该资源的所有访问始终锁定并解锁您创建的互斥锁以保护它。 / p>

您可能会发现有用的参考资料:POSIX Threads Programming

答案 1 :(得分:0)

据我所知,在操作系统中,互斥锁是一个信号量,但只能取两个值0或1。信号量就像一个锁,可以防止许多进程同时访问同一个共享内存部分(称为临界部分),从而导致错误的结果。

您可以在关键部分附上保护其不被多个进程同时访问的方法

wait(s) // decrement semaphore
//execute cs
signal(s) //increment semaphore (allow other processes to execute cs)

wait (S) { 
while S <= 0
; // no-op
S--;
{
signal (S) { 
S++;
{

简而言之,互斥是一种防止同步问题的方法。 您可以在此处参考幻灯片20 OS-book.com