pthread互斥锁到底能锁定什么?

Mar*_*rty 1 parallel-processing mutex pthreads

我假设这是在这里被问到的,但是我找不到这个特定的问题。它只是在锁定和解锁之间锁定部分代码,还是锁定全局变量?喜欢这个代码

pthread_mutex_lock(&mtx);
bitmap[index] = 1;
pthread_mutex_unlock(&mtx);
Run Code Online (Sandbox Code Playgroud)

互斥锁只是锁定那行代码?有没有一种方法可以锁定特定变量,而不只是锁定使用它们的部分代码?

pax*_*blo 5

不,它会锁定实际的互斥变量。

试图在锁定该互斥锁时对其进行锁定的任何代码段都将阻塞,直到将其解锁为止。

如果那是唯一锁定互斥锁的代码,那么可以,可以说它只是保护该行。但这并不一定。

互斥锁用于序列化对资源的访问。无论该资源被视为代码行,还是bitmap阵列(在这种情况下更可能),都取决于互斥体被锁定和解锁的位置。

您可能有几个不同的区域bitmap可以读取或修改数组,您应该确保它们受到互斥锁的保护。