作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果方法文档中没有另外说明,是否可以普遍假定 get 方法的线程安全性?还是反过来说,如果没有特别说明,永远不应该假定线程安全?你怎么看?
编辑:
上课
class InfoClass {
public:
void Init();
int GetInfo();
void Free();
};
调用 Init()
一次,从线程上下文调用 GetInfo()
,并在线程操作结束后调用 Free()
。
最佳答案
线程安全总是需要额外的工作,所以你唯一可以安全地假设是相反的 - 在没有直接支持的情况下,线程安全不是支持。
解释:
假设您有一个用于简单 64 位 long long
的 get
ter,并且正在 32 位架构上运行。当计算机正在获取该 64 位长值的后半部分(刚刚完成前半部分)时,另一个线程更新后半部分,现在您所拥有的是不一致的 - 因此它不是线程安全的。
编辑(以匹配问题中的编辑):
(旁注 - 您介绍类(class)的方式使其无法使用,因为所有成员都是私有(private)的)
如果您没有任何访问方法来改变您的类在构建后的状态,那么您可以假定线程安全。但这仍然是一个草率的斜坡,因为后来有人不知道你的假设可能会在类中添加一个 set
ter 并在随机错误调试体验中有一个美妙的旅程;)
关于c++ - 如果没有另外说明,是否可以假定 get 方法是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647896/
我是一名优秀的程序员,十分优秀!