我有一个(也许是愚蠢的)问题:
我使用 2 个线程,一个正在写浮点数,一个正在永久读取这个浮点数。我的问题是,当我不同步它们时会发生什么更糟的事情?如果某些值不正确,那也没有问题,因为它们每次写入操作都会切换一点。我目前以这种方式运行应用程序并且没有任何问题,所以我想知道会发生什么更糟的情况?
读/写冲突会导致像 12345 这样的数字被写入 54321 并且红色同时出现例如 54345 ?或者可能发生更糟糕的事情?(我不想使用同步来尽可能快地保持代码)
我有一个(也许是愚蠢的)问题:
我使用 2 个线程,一个正在写浮点数,一个正在永久读取这个浮点数。我的问题是,当我不同步它们时会发生什么更糟的事情?如果某些值不正确,那也没有问题,因为它们每次写入操作都会切换一点。我目前以这种方式运行应用程序并且没有任何问题,所以我想知道会发生什么更糟的情况?
读/写冲突会导致像 12345 这样的数字被写入 54321 并且红色同时出现例如 54345 ?或者可能发生更糟糕的事情?(我不想使用同步来尽可能快地保持代码)
可能发生的最糟糕的情况是您的读者线程永远不会看到您的作家线程所写的任何内容。不能保证一个线程写入的内存在没有某种形式的同步的情况下会被另一个线程看到。
最坏的情况是您的用户发现您的应用程序是错误的,因为它由于并发问题而无法正常运行。
无争用锁不会增加太多开销。您应该始终首先正确编写应用程序,然后仅在运行指示问题区域所在位置的指标后进行优化。我敢打赌,您的许多应用程序代码可能是性能问题的根源,而不是一些基本的同步。
如果一个线程正在写入特定的浮点数并将值从“a”更改为“b”,另一个读取相同浮点数的线程将只能看到“a”或“b”,而不会看到第三个值。
至于您的应用程序可能遇到的任何其他潜在逻辑问题,如果不了解您的应用程序的更多信息,就不可能回答这个问题。