防止重入并强制执行一致的状态

时间:2011-11-06 02:45:39

标签: api sdk consistency reentrancy

所以假设我有一个看起来像这样的C API:

// configure various parameters
int set_option(const char* name, const char* value);

// callback invoked during long running operation
typedef int (*callback_t)(void* whatever);

// start a long running operation
int some_long_operation(callback_t callback);

这些功能记录为不可重入。我是否应该尝试强制执行此操作(例如,通过在某处设置标志并返回相应的错误代码)或者我是否应该将其作为未定义的行为写入?我见过的大部分代码都没有尝试这样做;我只是想知道这是一个有意识的决定,还是只是实用主义(或者说是懒惰)。在我看来,如果你想编写非常强大的代码,你可能会尝试这样的东西;另一方面,如果你没有关注文件,那么也许所有赌注都应该关闭。

作为负责维护SDK的团队成员,我的经验有时令人害怕。虽然我们的文档不是很好,但我在OEM支持请求中看到了一些非常奇怪的事情。其中许多源于在另一个函数调用的回调上下文中调用函数。其中大多数都被记录为不受支持,但我们没有任何代码来防止它;事实上,大多数情况似乎都有效,但实际上有些可能会破坏我们的内部状态。看起来有时可能更容易实施适当的API使用而不是依赖人们阅读文档。

0 个答案:

没有答案