2012-07-12 758 views
2

我找不到明确的答案,所以这是地方。
Windows'EnterCriticalSection的行为方式是我可以在同一个线程中多次锁定它,并且我需要在出路时将其解锁,以便它可以免费使用。Linux相当于windows的EnterCriticalSection

什么是Linux等价物? pthread互斥体是否以相同的方式起作用?或者是多个锁,一个解锁...

+0

posix支持递归互斥锁(同一个线程可以锁定/解锁n次的单个互斥锁)。然而,国际海事组织的这种需要表明了糟糕的设计...... – Nim 2012-07-12 11:28:59

+0

可能重复[什么是Linux的等效于微软的关键部分的gcc?](http://stackoverflow.com/questions/3508507/what-are-gcc-on -linuxs-equivalent-to-microsofts-critical-sections) – 2012-07-12 11:32:34

+0

@Nim:不好的设计部分取决于。我同意,应尽可能避免它,但有时避免它导致有更糟糕的设计^^ – Andy 2012-07-12 11:34:28

回答

-1

您可以使用一个互斥体,都看向这个http://en.wikipedia.org/wiki/Critical_section

只要确保你把它放到递归模式。

以下链接介绍如何做到这一点的并行线程:http://www.ibm.com/developerworks/linux/library/l-ipc2lin3/index.html

+0

显然已知道此操作,请阅读问题... – Nim 2012-07-12 11:29:41

+0

请,您可以使用递归互斥,使用属性PTHREAD_MUTEX_RECURSIVE_NP – 2012-07-12 11:33:40

+0

@AG - 我认为PTHREAD_MUTEX_RECURSIVE_NP就是我的意思,你可以把它作为一个不同的答案吗? – Boaz 2012-07-12 11:41:55

3

使用boost :: recursive_mutex,你将不必再想想操作系统

+0

为什么在使用标准库时使用类似boost的库? – 2012-07-12 11:36:43

+0

以及他的问题被标记为Windows和Linux,所以我假设他正在做一个跨平台的应用程序 – Andy 2012-07-12 11:39:25

+0

因此使用PTHREAD_MUTEX_RECURSIVE_NP就像@ A.G。建议不正确? – Boaz 2012-07-12 11:40:48