根据POSIX,我可以静态初始化一个互斥这样:是否有一种可移植的方式来静态初始化递归互斥?
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
不过,如果我想要的互斥是递归的?互斥量是非递归的默认值,并且无法为静态初始化提供互斥属性。
根据POSIX,我可以静态初始化一个互斥这样:是否有一种可移植的方式来静态初始化递归互斥?
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
不过,如果我想要的互斥是递归的?互斥量是非递归的默认值,并且无法为静态初始化提供互斥属性。
似乎没有可移植的方法来做到这一点。解决方法可能会在首次使用时动态初始化互斥锁。为了防止竞争条件进行初始化,可以使用另一个非递归静态初始化互斥量。
尝试:
pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
便携式? –
_NP后缀表示非便携式。它适用于Linux。如果您关心可移植性,请尝试使用PTHREAD_RECURSIVE_MUTEX_INITIALIZER,如http://www.sourceware.org/pthreads-win32/manual/pthread_mutex_init.html中所述 –
PTHREAD_RECURSIVE_MUTEX_INITIALIZER未由POSIX定义。它支持哪些操作系统? –
是C还是C++?根据您使用的语言,建议可能会有所不同。 – NPE
这是C. C99 FWIW。 –