c++ - 关于_int64的一点疑问

查看:140
本文介绍了c++ - 关于_int64的一点疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在百度百科上关于_int64这种数据类型有这么一句话:

警告 在 32 位 Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态
Int64 字段,则该字段的最终值是无法预测的。

不是很理解这段话的意思。。。有什么通俗简单的解释么?

解决方案

就是32位计算机上,对_int64类型的变量赋值或取值,在CPU指令的层级,是两步操作,分别写或读内存的前32位和后32位。如果在这2个CPU指令之间,其他线程对这个变量进行读写,就会发生并发问题。
例如:
线程1先写了变量的前32位,
这时线程2写了变量的前32位和后32位,
接下来线程1写了变量的后32位。
最终结果,内存的前32位是线程2写的,后32位是线程1写的。最终内存中的数据是一个完全错误的数据。

这篇关于c++ - 关于_int64的一点疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆