A reference to a queue or semaphore is only valid inside the process in which it was created. When both VIs are running in the LabVIEW development environment, they both belong to the same process. When you build the VIs into executables, each executable becomes its own process. So the reference created inside one executable is meaningless inside the other executable.
In order to accomplish this with semaphores you can access the refnums across executables or even the network through a "Call By Reference" using VI server. More information about how to set this up can be found here.
Once the VI Server is properly set up, each semaphore reference can be called from multiple VI's or executables across the network to take advantage of the semaphore functionality in your overall system application.