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