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