“固有的线程安全”是什么意思?

2022-09-01 06:24:08

我遇到了这样一行“一些函数本质上是线程安全的,例如memcpy()

维基百科将“线程安全”定义为:

如果一段代码仅以保证多个线程同时安全执行的方式操作共享数据结构,则该代码段是线程安全的。

还行。但是,本质上意味着什么呢?它与继承有关吗?


答案 1

它与继承无关。它是一个非正式的表达,意思是
“某些函数本质上是线程安全的”。例如,不
涉及任何共享值/状态的函数无论如何都是线程安全的,即“本质上是线程安全的”。


答案 2

在这种情况下,我将其解释为“没有设计来实现它,它仍然是线程安全的”。

与继承的概念没有直接联系,尽管这些词当然是相关的。当然,这不是面向对象编程意义上的继承示例。这只是一个函数,从其核心性质获得线程安全的属性。

当然,本质上线程安全也没有什么神奇之处。任何没有内部状态或“共享”副作用的函数都会如此,这就是为什么函数式编程所有函数都应该是“纯”的并且没有副作用)非常适合并行编程。memcpy()

在实践中,在典型的计算机上,很难在没有副作用的情况下完成“实际工作”,特别是I / O在很大程度上是由其副作用定义的。因此,即使是纯函数式语言也经常有一些非函数式的角落。

更新:当然,它不是没有副作用,它的核心目的是操纵内存,如果在线程之间共享,肯定是不安全的。假设必须这样,只要目标区域是不同的,一个或多个线程并行运行都无关紧要。memcpy()memcpy()

与此形成对比,例如 ,后者在单个(用于进程)输出流上生成字符。它必须被显式实现(如 POSIX 所要求的)才能是线程安全的,而实际上并非如此。printf()memcpy()