Multithreading 在多线程环境中读写公共缓存文件是否需要同步?
考虑以下同时在多个线程上运行的算法:Multithreading 在多线程环境中读写公共缓存文件是否需要同步?,multithreading,Multithreading,考虑以下同时在多个线程上运行的算法: for (i=0; i<10000; i++) { z = rand(0,50000); if (isset(cache[z])) results[z] = cache[z]; else { result = z*100; cache[z] = result; results[z] = result; } 用于(i=0;i没有人可能知道。不同的语言、编译器、CPU、平台和线程标准可以以完全不同的方式处理此
for (i=0; i<10000; i++) {
z = rand(0,50000);
if (isset(cache[z])) results[z] = cache[z];
else {
result = z*100;
cache[z] = result;
results[z] = result;
}
用于(i=0;i没有人可能知道。不同的语言、编译器、CPU、平台和线程标准可以以完全不同的方式处理此问题。任何人都不可能知道未来的编译器、CPU或平台可能会做什么。除非语言或线程标准的文档或规范说明在如果是这种情况,绝对没有办法知道会发生什么。当然,如果您正在使用的东西保证了这种情况下的特定行为,那么保证会发生的事情就会发生(除非它被破坏)
曾经,不存在任何CPU来缓冲写操作,从而使它们可以无序地显示。但是,如果您在编写代码时假设这意味着写操作永远不会无序地显示,那么几乎所有现代平台上的代码都会被破坏
这个悲惨的故事一次又一次地重复着,伴随着无数的编译器优化,人们从来没有想到编译器会做出这些优化,但后来编译器却做出了这些优化
做出需要你正确想象未来可能的计算进化的决策似乎是极不明智的,而且在过去多次失败,有时甚至是灾难性的失败。这段代码是用什么语言编写的?你要按照什么线程标准编写代码?@DavidSchwartz我正为此使用PHP
。