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