I have been using VI server to pass messages between VI's (using invoke nodes or property nodes). This leads sometimes to race conditions and data loss. Having come that far the simplest solution was to add semaphores to prevent multiple VI's accessing the data simultaneously. A better way would be to use queues or notifiers to pass the data directly.
However, if the VI's are running on different computers, this won't work. How can I pass data across the network and still avoid a race condition? The solution should not care whether the data is going across the network or staying on the same computer/instance of Labview- it needs to work either way.
The leading contender seems to be datasocket
. Can anyone tell me the pro's and con's, or recommend a better way? e.g. how long does a datasocket call take? How much processor does it use? Is it going to take up excessive network bandwidth (i.e. loads more than the actual data.) Does the read datasocket VI pause until some data is available, or does it suck up system resources during that time?
Another way would be to have some way of generating an event of some kind over the network, but I can't figure out any way of doing this.