0

除了变量小于 memalign 并且在某些缓存情况下,我们是否需要读取锁来读取整数?

4

2 回答 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 回答