X11 为什么XInitThreads激活的锁是非递归的?

X11 为什么XInitThreads激活的锁是非递归的?,x11,xlib,xcb,X11,Xlib,Xcb,考虑以下调用流: 函数A调用XCheckIfEvent,在谓词参数中传递指向函数B的指针。函数B调用XGetWindowProperty 如果使用XInitThreads函数初始化XLib,则上述调用流在调用XGetWindowProperty时挂起。在我看来,调用xinithreads时激活的锁不是递归的。如果是真的,为什么?有没有办法让它递归?还是官方禁止在传递给XLib函数的回调中调用XLib函数?手册页: 如果已为线程初始化Xlib,则使用 显示被锁定,谓词调用任何 锁定显示的Xlib函

考虑以下调用流:

函数A调用XCheckIfEvent,在谓词参数中传递指向函数B的指针。函数B调用XGetWindowProperty

如果使用XInitThreads函数初始化XLib,则上述调用流在调用XGetWindowProperty时挂起。在我看来,调用xinithreads时激活的锁不是递归的。如果是真的,为什么?有没有办法让它递归?还是官方禁止在传递给XLib函数的回调中调用XLib函数?

手册页:

如果已为线程初始化Xlib,则使用 显示被锁定,谓词调用任何 锁定显示的Xlib函数未定义,除非调用方 首先调用了XLockDisplay

从另一个手册页:

对XLockDisplay的嵌套调用正常工作

因此,谓词似乎必须在完成时调用XLockDisplay和XUnlockDisplay