静态内联函数是否安全?

时间:2016-10-19 08:16:12

标签: c multithreading thread-safety

场景:我编写了一大段代码,运行在2个并行线程上,这些线程在代码方面是相同的,只是处理不同的数据。我看到了非确定性的结果。如果我禁用2个线程中的一个,结果将变为确定性。在这段代码中,我使用了一些静态内联函数(主要原因:它们是我需要的小函数,我只需要在需要它们的翻译单元中复制代码),我想了解它们是否存在可能是我的问题的可能原因。

C中的静态内联函数是否是线程安全的?换句话说,如果内部没有静态变量,但只有一些局部变量和输入参数,那么从2个线程同时调用会导致不可预测的行为吗?

2 个答案:

答案 0 :(得分:2)

不,那真的应该没事。

函数是否内联不应该影响这一点,因为它只是代码。

这种行为在实际的内存数据(结果)方面是不确定的,还是“只是”事件的时间和顺序等事情?

您是否可能写入参数,意外创建数据竞争?

答案 1 :(得分:0)

  

C中的静态内联函数是否是线程安全的?

是。静态内联函数对线程安全性没有影响。但是如果你使用静态变量,那么你必须要小心。

  

如果里面没有静态变量,只有一些局部变量   和输入参数,将从2个线程同时调用   导致不可预测的行为?

如果您使用的是本地变量,那么您将不会遇到任何问题。 因为每个线程都有自己的堆栈内存。