cdef extern from ... NOGIL

时间:2018-03-07 22:25:02

标签: python cython

我不能完全理解" nogil"适用于这样的cdef extern:

cdef extern from "pthread.h" nogil:

    ctypedef struct pthread_mutex_t:
        pass

    cdef int pthread_mutex_init(pthread_mutex_t *, void *)
    cdef int pthread_mutex_destroy(pthread_mutex_t *)

我不清楚这个nogil的影响,我在Cython的文档中找不到任何关于它的内容。我的解释是内部声明的函数隐含地具有nogil。我对吗?结构怎么样?

感谢您的任何信息。

1 个答案:

答案 0 :(得分:3)

Cython docs开始绑定C代码

  

nogil函数注释声明可以安全地调用   没有GIL的功能。

在您的示例中,这意味着pthread_mutex_init块中允许使用pthread_mutex_destroywith nogil函数。如果没有明确的with nogil块,GIL仍然存在:必须但不足以将该函数声明为示例中的完成。

普通C变量可以在nogil块中使用,但是你负责线程安全。