Race conditions most often occur when multiple threads or processes are reading and writing to a single data value. Notice I said reading and writing since having a single writer will alleviate this problem. Here is an abstract example to consider:
Lets say that your bank stores your account balance in is single global called BALANCE, and both you and your spouse have an ATM card to this account. When you use the card it calls the withdraw function (BALANCE = BALANCE - cash) if either you or your spouse uses the card there is no problem but what if you both use it at the same time deciding to withdraw $200.00 each?
you both read the BALANCE variable which lets say is $1000.00. You decrement your copy of the balance BALANCE = 1000 - 200 and update the variable with the new balance. The final amount will be $800.00 but it should have been $600.00. Ironically you might think the global saved you $200.00 but it does yield the wrong answer. If you can avoid using globalization then avoid it. Especially in LABVIEW where you have a data flow model of programming globals break the flow of data and can often be replaced with other data communication methods which provide a higher degree of synchronized data flow like queues. If you are seeing nondeterministic results (looks random) this is a sign that you have uninitialized variables (rare in Labview) or you have a race condition. Hope this example helped some,
Paul