代码之家  ›  专栏  ›  技术社区  ›  Jay

应该避免使用pthread\u mutex\u初始值设定项进行pthread\u mutex静态初始化吗?

  •  2
  • Jay  · 技术社区  · 14 年前

    使用pthread\u MUTEX\u初始值设定项静态初始化pthread MUTEX并直接传递它们以进行锁定,是否存在任何已知的问题?

    注意:使用PTHREAD\u Mutex\u初始值设定项初始化互斥锁不会立即初始化互斥锁。相反,在第一次使用时,pthread\u mutex\u lock()或pthread\u mutex\u trylock()函数会分支到一个慢路径,并导致互斥的初始化。因为mutex不仅仅是一个简单的内存对象,而且需要系统分配一些资源,所以在使用pthread\u mutex\u INITIALER静态初始化并且尚未锁定的mutex上调用pthread\u mutex\u destroy()或pthread\u mutex\u unlock()的尝试会导致EINVAL错误。

    所以,如果两个线程在静态初始化后调用pthread\u mutex\u lock,会不会导致任何问题?

    1 回复  |  直到 14 年前
        1
  •  2
  •   tristan    14 年前

    我认为这不是问题。 给定的POSIX线程定义了API,而不是实现。如果一些实现选择某种特殊的方法,这不是问题。但是应该保证调用pthread\u mutex\u lock的正确行为。