自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(300)
  • 收藏
  • 关注

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍1

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:44 717 7

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍2

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:41 1072 4

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍3

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:37 762

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍4

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:33 913 2

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍5

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:30 1079 4

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍6

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:26 967

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍7

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:20 1693 2

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍8

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:16 570 3

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍9

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:13 853 2

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍10

引言随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学会选择开发效率高,功能强大的虚拟机支持的高级语言(Java),或者脚本语言(Python,Php)作为实现功能的首选,而不会选择开发效率低,而运行效率高的 C/C++ 作为开发语言。而这些语言一般情况下是运行在虚拟机或者解释器中,而不需要直接跟操作系统直接打交道。虚拟机和解释器相当于为高级语言或者脚本语言提供了一个中间层,隔离了与操作系统之间进行交互的细节,这为工程师们减少了很多与系统底层打交道的麻烦,大大提高了工程

2025-01-10 22:40:10 814 4

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍11

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:06 1142 2

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍12

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:40:02 652 2

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍13

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:39:57 1014 5

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍14

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:38:26 959 2

原创 高级语言(Java\Python\Php)的编译:链接及装载过程介绍15

这里我们看到了nm命令的输出默认有三列,其中最左边的一列是变量的相对地址,中间的一列表示变量所在的段的类型,右面表示变量的名字。我们在C源码文件部分曾经提到过,变量和函数的声明本质上是给编译器一个承诺,告诉编译器虽然在本文件中没有这个变量或者函数定义,但是在其他文件中一定有,所以当编译器发现程序需要读取这个变量对应的数据,但是在源文件中找不到的时候,就会把这个变量放在一个特殊的段(段类型为 U)里面,表示后续链接的时候需要在后面的目标文件或者链接库中找到这个变量,然后链接成为可执行二进制文件。

2025-01-10 22:38:23 870 4

原创 Kafka文件存储机制那些事15

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:48 873 1

原创 Kafka文件存储机制那些事14

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:46 916 2

原创 Kafka文件存储机制那些事13

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:42 999 1

原创 Kafka文件存储机制那些事12

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:40 874 4

原创 Kafka文件存储机制那些事11

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:37 703

原创 Kafka文件存储机制那些事10

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:34 840 1

原创 Kafka文件存储机制那些事9

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:32 825 3

原创 Kafka文件存储机制那些事8

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:29 668

原创 Kafka文件存储机制那些事7

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:24 583 3

原创 Kafka文件存储机制那些事6

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:21 1014

原创 Kafka文件存储机制那些事5

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:18 741 2

原创 Kafka文件存储机制那些事4

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:16 1001 1

原创 Kafka文件存储机制那些事3

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:13 600

原创 Kafka文件存储机制那些事2

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:10 610 1

原创 Kafka文件存储机制那些事1

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

2025-01-09 23:33:08 688 1

原创 Java内存访问重排序的研究15

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:32 842 4

原创 Java内存访问重排序的研究1

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:23 713 2

原创 Java内存访问重排序的研究2

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:19 957 3

原创 Java内存访问重排序的研究3

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:17 647

原创 Java内存访问重排序的研究4

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:15 686 1

原创 Java内存访问重排序的研究5

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:13 1042 2

原创 Java内存访问重排序的研究6

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:10 979 1

原创 Java内存访问重排序的研究7

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:08 782

原创 Java内存访问重排序的研究8

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:05 928 1

原创 Java内存访问重排序的研究9

a = 1;x = b;});b = 1;y = a;});one.join();很容易想到这段代码的运行结果可能为(1,0)、(0,1)或(1,1),因为线程one可以在线程two开始之前就执行完了,也有可能反之,甚至有可能二者的指令是同时或交替执行的。然而,这段代码的执行结果也可能是(0,0). 因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。得到(0,0)结果的语句执行过程,如下图所示。

2025-01-08 21:12:03 552 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除