除了变量小于 memalign 并且在某些缓存情况下,我们是否需要读取锁来读取整数?
问问题
109 次
2 回答
1
分析器假定由于f1()
已获取 的地址,因此可以从任何上下文通过该函数指针调用它。例如,如果您有一个线程正在更新x
:
lock xlock;
update x;
unlock xlock;
并且另一个线程f1()
同时通过函数指针调用f1()
,第二个线程中的访问将不受锁的保护。因此,它可能会看到 的部分更新x
,或者看到更新相对于其他更新的排序不正确。
函数指针之所以重要,是因为如果f1()
从未获取过的地址,那么分析器可以准确地确定函数的调用位置。当地址被取走时,它必须假设最坏的情况。
于 2013-01-29T23:46:17.367 回答
1
从您引用的文本中(强调我的):
如果一个函数的地址被占用,那么我们假设我们不知道对该函数进行的每个调用的上下文。
因为 lint 无法确定f1
可以在其中进行调用的每个上下文,所以它假设可以在任何上下文中调用它,包括访问x
导致某些数据竞争的上下文。
合理地,您可能不会通过返回来击中任何可怕的东西x
。但这是一种可能性,使用 lint 的全部目的是减少关于代码如何在意外输入下运行的不确定性。
于 2013-01-29T23:47:17.763 回答