LabVIEW Graphical Programming, Fourth Edition

When you build a Lab VIEW application, you'll eventually find the need to go beyond simple sequencing and looping to handle all the things that are going on in the world outside your computer. A big step in programming complexity appears when you start handling events. An event is usually defined as something external to your program that says, "Hey, I need service!" and demands that service in a timely fashion. A simple example is a user clicking a button on the panel to start or stop an activity. Other kinds of events come from hardware, such as a GPIB service request (SRQ) or a message coming in from a network connection. Clearly, these random events don't fall within the simple boundaries of sequential programming.
There are lots of ways to handle events in LabVIEW, and many of them involve creating parallel paths of execution where each path is responsible for a sequential or nonsequential (event-driven) activity.
Since G is intrinsically parallel, you can create an unlimited number of parallel loops or VIs and have confidence that they'll run with some kind of timesharing. But how do you handle those "simultaneous" events in such a way as to avoid collisions and misordering of execution when it matters? And what about passing information between loops or VIs? The complexity and the list of questions just seem to grow and grow.
LabVIEW has some powerful synchronization features, and there are standard techniques that can help you deal with the challenges...