Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
销毁静态互斥和rwlock初始值设定项_C_Pthreads_Posix - Fatal编程技术网

销毁静态互斥和rwlock初始值设定项

销毁静态互斥和rwlock初始值设定项,c,pthreads,posix,C,Pthreads,Posix,假设我们有一个全局互斥锁或rwlock,使用静态初始值设定项初始化: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 或 文档说明它相当于带有默认参数的pthread\u*\ u init 我们必须销毁以这种方式初始化的互斥锁或rwlock吗?是。这些是初始化互斥体的替代方法,但您只有一种方法来完成它:pthread\u*\ u destroy() 在Pthreads-w32实现中,应用程序仍应在某个时刻调用pthread_mutex_d

假设我们有一个全局互斥锁或rwlock,使用静态初始值设定项初始化:

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

文档说明它相当于带有默认参数的
pthread\u*\ u init


我们必须销毁以这种方式初始化的互斥锁或rwlock吗?

是。这些是初始化互斥体的替代方法,但您只有一种方法来完成它:
pthread\u*\ u destroy()

在Pthreads-w32实现中,应用程序仍应在某个时刻调用pthread_mutex_destroy,以确保释放互斥所消耗的任何资源

(这也是一个w32实现,我相信POSIX的行为是一样的)

在默认互斥体属性合适的情况下,可以使用宏PTHREAD_mutex_初始值设定项初始化互斥体。该效果应等同于通过调用pthread_mutex_init()(参数attr指定为NULL)进行动态初始化,但不执行任何错误检查

如果效果相同,则应使用“镜像”函数
pthread\u mutex\u destroy


另请参见此相关的

否。静态分配和动态分配的互斥体之间的差异基本上与位于堆栈或堆中的变量相当。您不必返回未动态分配的互斥锁。 引用Michael Kerrisk的“Linux编程接口”:

当不再需要自动或动态分配的互斥体时,应使用pthread_mutex_destroy()销毁该互斥体。(无需对使用静态初始化的互斥体调用pthread_mutex_destroy() PTHREAD_MUTEX_初始值设定项。)


事实证明,@lulijeta有正确的答案,我被帕拉诺德愚弄了
pthread_rwlock_t lock = PTHREAD_RWLOCK_INITIALIZER;