2012-12-07 32 views
0

根据POSIX,我可以静态初始化一个互斥这样:是否有一种可移植的方式来静态初始化递归互斥?

pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; 

不过,如果我想要的互斥是递归的?互斥量是非递归的默认值,并且无法为静态初始化提供互斥属性。

+0

是C还是C++?根据您使用的语言,建议可能会有所不同。 – NPE

+0

这是C. C99 FWIW。 –

回答

0

似乎没有可移植的方法来做到这一点。解决方法可能会在首次使用时动态初始化互斥锁。为了防止竞争条件进行初始化,可以使用另一个非递归静态初始化互斥量。

0

尝试:

pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; 
+0

便携式? –

+0

_NP后缀表示非便携式。它适用于Linux。如果您关心可移植性,请尝试使用PTHREAD_RECURSIVE_MUTEX_INITIALIZER,如http://www.sourceware.org/pthreads-win32/manual/pthread_mutex_init.html中所述 –

+0

PTHREAD_RECURSIVE_MUTEX_INITIALIZER未由POSIX定义。它支持哪些操作系统? –