Turning the question back around...
Why are you using file/module level static functions and data in the first place? If you want file/module level functions and data then use an anonymous namespace.
Removing statics won't make your code thread safe BTW - any form of shared data or aliasing of variables can sink you unless you're very careful.
Cheers,
Ash
PS in response to the comment below...
You don't need to name your namepaces if you're just using them to restrict access to other objects in the same file. If you do:
namespace
{
bool do_something_groovy_that_was_static()
{
}
}
then only things in the same file as
do_something_groovy_that_was_static
will be able to call it.
As far as multithreading the only code that's absolutely safe to use is something that doesn't use anything not directly created in that code. So local variables only and only use functions with no side effects. These days you can get away with memory allocation with multithreaded allocators but I wouldn't stick my neck out much further.
Globals are one of the roots of all mulithreading evils - make sure that any global resources you use are synchronised properly. Wrap them up in a class if you have to but make sure nothing can get at them without acquiring a lock of some sort. The same goes for statics as well, whether in functions, classes or files.
One suggestion is that if you use fairly strict test driven development (which, as a side effect, removes things like globals and statics as it's almost impossible to write unit tests for code that depends on these things) then your code will be a lot more thread safe. From my limited experience that seems to work so it might be a route to follow in future.