注册的回调函数运行时,dcbFreeCallback是否安全?

时间:2017-03-21 05:52:30

标签: java memory-management opencl lwjgl dyncall

我使用的是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}}文档。

那么,它在所有平台上都能保证安全吗?

0 个答案:

没有答案