in reply to
How to share complex data structure in threads ?
Although it may seem "obvious" that each player of an MMPG should be "a thread," that isn't what you should do ... no more than you should have a separate thread for each connected user to a website. Connected users are, say, a TCP/IP port. The game itself is a state-machine. The amount of time required to resolve the effect of anyone's move is a few microseconds: moves can be processed effortlessly one-at-a-time with a queue by one thread. (If you want a Perl analogy, look at POE.) And on this point, save yourself trouble: MMPGs are a dime a dozen and so are engines designed to run them. You don't need to write a Perl program from scratch to do such a thing.