2012-07-12 58 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