繁体   English   中英

C99中本地静态数组的线程安全

[英]Thread safety of local static array in C99

以下是线程安全的,因为每个数组元素只能由一个线程访问(包括此处未显示的实际部分):

static bool myArray[THREAD_COUNT] = {false}; // Only used in DoSomething()

void DoSomething(uint8_t threadIndex)
{
   myArray[threadIndex] = true;
   // Real world function is more complex
}

现在考虑以下代码:

void DoSomething(uint8_t threadIndex)
{
   static bool myArray[THREAD_COUNT] = {false};
   myArray[threadIndex] = true;
   // Real world function is more complex
}

此函数是否也是线程安全的(特别是考虑到在函数的第一次调用而不是启动时进行的数组初始化)?

它是安全的。 程序启动前,所有具有静态存储持续时间的对象均已初始化。 这意味着甚至在任何线程开始发挥作用之前。

5.1.2执行环境

定义了两个执行环境:独立和托管。 在这两种情况下,当执行环境调用指定的C函数时,都会发生程序启动。 程序启动前,所有具有静态存储持续时间的对象都应初始化(设置为其初始值)。 否则未指定这种初始化的方式和时间。 程序终止将控制权返回到执行环境。

(强调我的)。

C99没有线程的概念。 但这就是我从标准中解释以上引用的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM