|Do you know where your variables are?|
I think that that it does make sense, considering I took the original problem ... and downsized it to something easily shared.
The code as posted doesn't make sense. (I cannot see the bits you omitted.)
It's also a bit weird to name a subroutine lockit(), if in addition to locking something, it goes on to process that something (for hundreds of lines).
In general, you'll get better advice and solutions if you don't hide the real code.
(I know that flies in the face of the common advice for sites like this, but with the non-determinacy of threading far more so than with non-threaded code, being able to see (and preferably run) the actual code, is pretty much a prerequisite to provide good help and advice.)
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
In reply to Re^3: PERL issues a "lock can only be used on shared values" when locking a shared hash