【发布时间】:2019-05-16 04:58:13
【问题描述】:
假设我们在库中有一个 C 函数 funA,在 funA 中它会调用一些其他函数 funB、funC 等。 funB 和 funC 可能会回调 funA。所以问题是: 是否可以在 funA 内部检测到这种情况,例如:
void funA(void) {
if (...) {
// Calling back to funA
}
}
结论
- 在单线程环境中,静态/全局变量可以工作。
- 在多线程环境中,必须依赖 TLS 支持。
- 没有任何答案可以仅通过语言 (C) 级别的技巧来实现这一目标
【问题讨论】:
-
是的,有一个静态标志。在函数的开头检查它,设置它然后在函数返回之前清除它。
-
@WeatherVane 这不会起作用 funA 可以被不同的线程调用,不是吗?
-
那么请把这个要求放在问题中。已经有一些库函数不是线程安全的。
-
你为什么不让它接受一个参数?
-
@mnistic 你能解释一下这是什么样的吗?
标签: c recursion computer-science cpu-architecture software-design