场景:我编写了一大段代码,运行在2个并行线程上,这些线程在代码方面是相同的,只是处理不同的数据。我看到了非确定性的结果。如果我禁用2个线程中的一个,结果将变为确定性。在这段代码中,我使用了一些静态内联函数(主要原因:它们是我需要的小函数,我只需要在需要它们的翻译单元中复制代码),我想了解它们是否存在可能是我的问题的可能原因。
C中的静态内联函数是否是线程安全的?换句话说,如果内部没有静态变量,但只有一些局部变量和输入参数,那么从2个线程同时调用会导致不可预测的行为吗?
答案 0 :(得分:2)
不,那真的应该没事。
函数是否内联不应该影响这一点,因为它只是代码。
这种行为在实际的内存数据(结果)方面是不确定的,还是“只是”事件的时间和顺序等事情?
您是否可能写入参数,意外创建数据竞争?
答案 1 :(得分:0)
C中的静态内联函数是否是线程安全的?
是。静态内联函数对线程安全性没有影响。但是如果你使用静态变量,那么你必须要小心。
如果里面没有静态变量,只有一些局部变量 和输入参数,将从2个线程同时调用 导致不可预测的行为?
如果您使用的是本地变量,那么您将不会遇到任何问题。 因为每个线程都有自己的堆栈内存。