当前位置: 技术问答>linux和unix
关于phtread_mutext_t结构初始化的疑惑
来源: 互联网 发布时间:2017-03-11
本文导语: 从环高里看见,该结构体可以有静态与动态两种初始化方式。当该类型的变量被声明为静态全局变量时,我们应该使用宏PTHREAD_MUTEX_INITIALIZER在变量定义的时候对它进行初始化,而如果是利用malloc动态分配的变量,则...
从环高里看见,该结构体可以有静态与动态两种初始化方式。当该类型的变量被声明为静态全局变量时,我们应该使用宏PTHREAD_MUTEX_INITIALIZER在变量定义的时候对它进行初始化,而如果是利用malloc动态分配的变量,则须利用init函数和destroy函数进行初始化和销毁。
我不明白为什么要分静态初始化和动态初始化两种方式,直接都用init函数不就可以了吗?而在静态初始化时为什么不需要destroy呢?
我不明白为什么要分静态初始化和动态初始化两种方式,直接都用init函数不就可以了吗?而在静态初始化时为什么不需要destroy呢?
|
也许你还没有man pthread.h 看过里面有多少配置mutexattr的函数,所以意识不到pthread_mutex_init的用途。
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
重点关注第二个参数。
另外,这是静态初始化存在的必要性:
Providing for static initialization of statically allocated synchronization objects allows modules with private static synchronization variables to avoid
runtime initialization tests and overhead.
再另外,没有规定说静态初始化的不可以destroy,它在不使用时理所应当主动destroy。但为什么我们一般不主动detroy是因为我们已经将它静态初始化了,说明它的用途就是伴随着程序出生到结束的,一般没有释放的理由。 如果你detroy了一个静态初始化的mutex, 并希望再次使用它,请重新对其mutex_init,原因:
In cases where default mutex attributes are appropriate, the macro PTHREAD_MUTEX_INITIALIZER can be used to initialize mutexes that are statically allocated.
The effect shall be equivalent to dynamic initialization by a call to pthread_mutex_init() with parameter attr specified as NULL, except that no error checks
are performed.
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
重点关注第二个参数。
另外,这是静态初始化存在的必要性:
Providing for static initialization of statically allocated synchronization objects allows modules with private static synchronization variables to avoid
runtime initialization tests and overhead.
再另外,没有规定说静态初始化的不可以destroy,它在不使用时理所应当主动destroy。但为什么我们一般不主动detroy是因为我们已经将它静态初始化了,说明它的用途就是伴随着程序出生到结束的,一般没有释放的理由。 如果你detroy了一个静态初始化的mutex, 并希望再次使用它,请重新对其mutex_init,原因:
In cases where default mutex attributes are appropriate, the macro PTHREAD_MUTEX_INITIALIZER can be used to initialize mutexes that are statically allocated.
The effect shall be equivalent to dynamic initialization by a call to pthread_mutex_init() with parameter attr specified as NULL, except that no error checks
are performed.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。