作为线程的初学者,我很难理解互斥体的逻辑是如何工作的。需要帮助了解多线程在以下代码段中的工作原理以及每x
次调用foo()
的输出结果:
foo()
{
static int x;
X_lock(); //locking
x++;
X_unlock; //unlocking
return x;
}
信号量和互斥量之间的基本区别是什么?一个简单的例子就是不错的。
答案 0 :(得分:1)
有时线程需要使用相同的资源,并且可以调用未识别的行为。例如,添加不是原子操作,因此可能导致此问题。所以在不同的线程之间需要某种 barrier ,只有一个线程可以通过该屏障,而其他线程必须等待该线程完成,一个线程完成后,接下来通过屏障等等必须等待线程完成。
这是竞争条件的一个示例,并且MUTEX(互斥)用于此。互斥是如何工作的?首先,你必须在主函数中初始化互斥锁:
pthread_mutex_init(&lock, NULL).
变量pthread_mutex_t lock;
是全局的,因此每个线程都可以访问它。之后,一个主题将锁定互斥锁:
pthread_mutex_lock(&lock);
现在,下一个线程也出现在同一点上,我刚刚编写的代码行,并且无法通过它。所以每个其他线程都必须等待这个障碍 - 这行代码,直到第一个线程解锁互斥:
pthread_mutex_unlock(&lock);
然后根据哪个线程从OS获取处理器时间将通过障碍,同样的事情重复一遍。
互斥是非常重要的概念。至于信号量,它们用于相同的事情,线程同步,here是涵盖这个主题的优秀文章。