我使用的是lwjgl 3提供的OpenCL的Java绑定。
当我调用clSetEventCallback
时,我必须将回调函数传递给clSetEventCallback
。对于每次clSetEventCallback
来电,我都会从lwjgl CLEventCallback.create
创建一个新的回调函数,该函数最终会调用dyncall
dcbNewCallback()
。
CLEventCallback myCallback = CLEventCallback.create(new CLEventCallbackI {
...
});
clSetEventCallback(..., myCallback, ...);
由于我传递给clSetEventCallback
的回调函数只会被评估一次,我想在OpenCL调用它时将其销毁。
@Override
public void invoke(long event, int status, long user_data) {
myCallback.close();
}
myCallback.close()
由lwjgl提供,最终会调用dyncall
' s dcbFreeCallback()
。
以上代码对我来说运行良好。
我想如果dyncall
创建JMP
- 就像所有CPU的说明一样,那么它是安全的。
但是,我没有找到任何允许在注册的回调函数运行时调用dyncall
的{{1}}文档。
那么,它在所有平台上都能保证安全吗?