I'm just starting to learn about threads myself, but have you looked at the Threads modules on cpan, it looks like
Thread-Tie
and
Thread-Use
seems to apply to your situation. It looks like Elizabeth Mattijsen is trying to work thru alot of these issues.
From the perlthrtut:
If you're using a module that's not thread-safe for some
reason, you can protect yourself by using it from one, and
only one thread at all. If you need multiple threads to
access such a module, you can use semaphores and lots of
programming discipline to control access to it.
I guess the conventional wisdom, is if your app needs to keeps variable data separate, use a forked model. If your app needs to share variable data, use a threads model.