当前位置:  技术问答>linux和unix

关于phtread_mutext_t结构初始化的疑惑

    来源: 互联网  发布时间:2017-03-11

    本文导语:  从环高里看见,该结构体可以有静态与动态两种初始化方式。当该类型的变量被声明为静态全局变量时,我们应该使用宏PTHREAD_MUTEX_INITIALIZER在变量定义的时候对它进行初始化,而如果是利用malloc动态分配的变量,则...

从环高里看见,该结构体可以有静态与动态两种初始化方式。当该类型的变量被声明为静态全局变量时,我们应该使用宏PTHREAD_MUTEX_INITIALIZER在变量定义的时候对它进行初始化,而如果是利用malloc动态分配的变量,则须利用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.

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3