【发布时间】:2011-06-26 17:50:08
【问题描述】:
我是多线程的新手,并试图了解互斥锁的工作原理。做了很多谷歌搜索,但仍然对它的工作原理产生了一些疑问,因为我创建了自己的程序,其中锁定不起作用。
互斥锁的一个绝对不直观的语法是pthread_mutex_lock( &mutex1 );,看起来互斥锁被锁定了,而我真正想要锁定的是其他变量。这种语法是否意味着锁定互斥锁会锁定代码区域,直到互斥锁解锁?那么线程是如何知道该区域被锁定的呢? [更新:线程知道该区域被锁定,由 Memory Fencing ]。这种现象不应该被称为临界区吗? [更新:关键部分对象仅在 Windows 中可用,其中对象比互斥锁更快,并且仅对实现它的线程可见。否则,临界区只是指受互斥体保护的代码区域]
简而言之,您能否提供最简单的互斥锁示例程序和最简单的解释来说明其工作原理?我相信这会对很多其他新手有所帮助。
【问题讨论】:
-
继续强调需要一个简单的教程(无论是 boost 线程、tbb 还是 pthreads): 混淆示例:1.stackoverflow.com/questions/3528877/… 2.stackoverflow.com/questions/2979525/… 3.stackoverflow.com/questions/2095977/to-mutex-or-not-to-mutex 4 .stackoverflow.com/questions/3931026/… 5.stackoverflow.com/questions/1525189/…
-
我的意思不是冒犯性的,但是您最后的评论对我的建议是,我们需要更少的类比和更好的技术解释来解释互斥锁的工作原理以及我们为什么需要它们。
-
@San:没有冒犯 :) 我的 cmets 只是为了建议新手可以获得关于互斥锁的最短、最清晰的解释。许多类比可能会让新手感到困惑,所以不同的类比应该分开保存。我发布问题和答案的全部原因是因为作为一个新手,我发现阅读冗长的解释和代码示例很痛苦。我不希望其他人经历痛苦。
-
@Cory:如果这个答案可以改进,我很乐意接受你的建议。我很高兴很多其他人发现它很有帮助。如果它对您没有帮助,那么其他人也有指向其他互斥体教程的答案。为什么这么消极?
标签: c++ c multithreading synchronization mutex