如果函数调用自身充当内存屏障,为什么pthread_mutex_lock()和pthread_mutex_unlock()包含内存屏障?

时间:2018-05-19 10:32:56

标签: c linux multithreading pthreads

我已经读过pthread_mutex_lock()pthread_mutex_unlock()都包含内存障碍。

我还读到,当你调用一个函数时,函数调用本身就是一个内存障碍。

那么在函数pthread_mutex_lock()pthread_mutex_unlock()中包含记忆障碍的重点是什么?

我的意思是说我们有以下代码:

a = 5;
b = 7;
pthread_mutex_lock(&lock);
i++;
pthread_mutex_unlock(&lock);
c = 10;

pthread_mutex_lock()pthread_mutex_unlock()是否包含内存障碍,上述代码仍然会执行相同的操作。

1 个答案:

答案 0 :(得分:1)

内存屏障只是告诉您它确保您可以控制是否可以访问代码的某些部分(澄清:代码操作内存)。

如果你的意思是函数pthread_barrier_wait(): 有一点不同。如果您只是调用mutex_lock,则必须等到此互斥锁解锁,然后才能继续。

有了障碍,你将不得不等到所需数量的线程在“障碍”上调用“等待”。

phtread1-------é[..........blocked]-------

phtread2----é[.............blocked]-------

pthread3--------------------------é-------

澄清我上面做了什么:é是要求屏障,' - '是程序执行时和'。'就在你等待的时候。