本地全局或网络共享变量可能导致竞争状况

更新 Oct 28, 2020

适用于

软件

  • LabVIEW

问题详述

  • 我有两个独立的while循环并行运行。第一个while循环是获取数据并将其存储在本地,全局或共享变量中。第二个循环是定期从局部,全局或共享变量中读取数据。在大多数情况下,一切运行顺利,但有时我会丢失数据,并且变量变为空。
  • 我有一个在主机上使用的网络共享变量,而其他计算机正在读取该变量,有时会看到意外的结果。

解决方案

在生产者/消费者体系结构中实现的队列最常用于避免数据匮乏或数据溢出。使用生产者/消费者体系结构具有同步优势,因为消费者循环仅在队列中有可用数据时执行。

另一种选择是使用信号量函数全局变量,它们在写入变量资源时可以有效地锁定变量资源。

相关信息

是什么原因造成的?

在以下情况下,使用两个或多个并行循环写入和读取同一变量或尝试在向其写入值时访问网络共享变量,可能会导致竞争状况:

  • 循环正在读取局部,全局或共享变量的值,而另一个正在写入局部,全局或共享变量的值。如果它们不同步,则可以在实际发送值之前读取该值,反之亦然。
  • 一台计算机正在将数据写入网络共享变量,而其他计算机则尝试同时访问该值。