synchronization - 多线程中的原子代码和关键代码有什么区别?
问题描述
多线程中的原子代码和关键代码有什么区别?据我了解,两者都应该是一次必须由一个线程执行的代码块,但我不理解“关键”和“原子”含义的深度。
谢谢您的帮助。
解决方案
没有不同。代码的关键部分执行原子操作。
我不知道这两个名字的来历。我认为“关键部分”可能来自操作系统设计,在执行某些代码部分期间禁用中断有时很重要;但我更喜欢说“原子”,因为无论如何,对我来说,更明显的是,我描述的是由一个线程完成的一系列操作,当被其他线程看到时,这些操作必须看起来好像它们发生在一个瞬间.
我们不要忘记“操作”意味着对数据的操作。代码是只读的。代码永远不需要保护。需要保护的始终是数据。如果您认为对数据集合的某些操作需要是原子的,那么您应该询问对同一数据的其他操作是否也需要是原子的。
推荐阅读
- python - AttributeError: 'list' 对象没有属性 'symmetric_difference' 初学者错误
- javascript - 使用 gulp 与 webpack-stream 和 babel loader 来转换 jsx
- arrays - 我找不到为什么我的 C 代码没有编译而另一个正在运行两者几乎相同
- mysql - 如何使用 MySQL 声明开始日期和结束日期
- r - 构建 R 包时如何向导出的数据添加列表?
- passport.js - 带 Gatsby 注销的 Passport-Local 未完全注销
- javascript - 是否可以在特征检测中包装 core-js polyfill?
- laravel - 我应该使用 FormRequest 的 prepareForValidation 来传递验证请求的参数吗?
- python - 我应该使用 if 语句还是循环?
- python - 将传单地图添加到 PyQt5