同步与异步(线程)

  • Post author:
  • Post category:其他




同步与异步

有两个线程在并发执行以下代码段, 其中 g 是 int 类型的全局变量。 请

问当两个线程都执行完毕该代码段后, g 的值的取值范围为50000-100000。

for (int i = 1; i <= 50000; i++) {
g += 1;
}

当多个控制线程共享内容的内存时,需要确保每个线程看到一致的数据视图。如果每个线程使用的变量都是其他线程不会读取和修改的,那么就不存在一致性的问题。但是,当一个线程可以修改的变量,其他线程亦可以读取或者修改的时候,我们就需要对这些线程进行同步,确保他们在访问变量的存储内容时不会访问到无效的值。

上面的题就是一个例子,(除过一些特别极端的情况)上面的取值范围为50000-100000,为什么会出现这种情况呢

两个或多个线程试图在同一时间修改统一变量时,需要进行同步。

而对于同步这个概念,之前总是不是很理解,把同步和异步混淆。以为同步是同时发生,异步是不同时间发生,这是不对的

线程同步

同步是让不同的线程对一个变量的操作不是同时发生,因为如果一个线程在对一个变量进行写操作的时候,另一个线程对这个变量进行读操作(这时另一个线程的写操作并没有完成),这时就会产生一些



版权声明:本文为DownloadV原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。