我不能完全理解" 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。我对吗?结构怎么样?
感谢您的任何信息。
答案 0 :(得分:3)
从Cython docs开始绑定C代码
nogil函数注释声明可以安全地调用 没有GIL的功能。
在您的示例中,这意味着pthread_mutex_init
块中允许使用pthread_mutex_destroy
和with nogil
函数。如果没有明确的with nogil
块,GIL仍然存在:必须但不足以将该函数声明为示例中的完成。
普通C变量可以在nogil块中使用,但是你负责线程安全。