スレッドセーフなアプリやDLLを作るのに心がけることはどんなことでしょうか?

staticな変数やグローバル変数、動的確保を一切使わなければ完全に安全な関数といえるんでしょうか?
また、上記のものを使う場合ミューテックスなどを使ってアクセスを一つに絞れば完全に安全でしょうか?