How can you make "instances" of a subVI in LabVIEW when it is used repeatedly?

I posted this this question that I have at ni.com/first, which is National Instrument’s FIRST community; pretty much like a forum. It’s a great resource and if you haven’t heard of it, may you be shamed :yikes: . Anyways, you can reply there or here, I don’t care. Here’s the link to that post; if you have this same question, people’s answers over there will probably be helpfull too: http://decibel.ni.com/content/message/4811

Here is my copied question:
The other programmers on my team and I would like to know how to create/use “instances” of a subVI in LabVIEW (this is the programming term that is used by the other programmers, to which I am new to). If we could have someone direct us to where we can find out about this or explain it to us personally, that would be much appreciated. Let me describe our situation to explain better.

We have implemented acceleration control and traction control on each of our 4 wheel motors. This requires that we run a joystick/encoder/constant value into a bunch of code to get our motor value. Since it’s big and bulky and the same oporation for each motor, we made a subVI for this section of code. We used the “select VI” option in the palete of the block diagram to insert this subVI into our main VI four times, one subVI for each motor. But when we tried out our code, the VI was calling up the same exact subVI file four times and was running it four times at the same time. This of course caused major problems and slowed down our robot a lot. We came up with a “duct-tape-like” solution and just make four files of the subVI and named the 4 files like “subVI”, “subVI_1”, “subVI_2”, etc. Then we just used those four subVIs individually in our program. With our traction control section, we didn’t even bother making subVIs and the guys who were working on that just coped the raw code four times (yes, that part of the code is very large).

I am pretty experiened in LabVIEW but am not as familiar with programming in general, while the other two programmers on our team are very experienced with C. They explained to me how something called “making instances” of the subVI is what needs to be done, and that LabVIEW probably has that capability to do this (like C does, supposedly), but we don’t know what to do to “make it happen”. This would automatically make copies of a subVI if it is used multiple times in a VI and call up those, not the same subVI simultaniously.

We would appreceate if someone could tell us how to do this. It’s really late in the season and our code works, but this definitely sounds like a usefull skill to have for future years and such.
Thanks so much!

As was posted there, you need to enable reentrant execution