私は時にはマルチスレッドを実行する必要があるいくつかのライブラリコードがありますが、より一般的にはシングルスレッドです。非常に頻繁に呼び出される一連の小さなルーチンです。以前の経験とプロファイリングでは、追加の遅延がパフォーマンスに悪影響を与える可能性があることを示しているため、不要なオーバーヘッドを避けたいと考えています。C++ 03 NULLポインタ対ヌルオブジェクトパターン:パフォーマンスへの影響
私は、シングルスレッドとマルチスレッドの使用のためにライブラリの別のインスタンスを提供することはできませんし、シングルスレッドのスレッドセーフなラッパーも提供できません。これらの制限は両方ともライブラリの設計によるものです。
マルチスレッドで実行するときのルーチンを保護する方法として、スコープ付きのミューテックスを使用する方法があります。私の最初の考えはthis SO answerの線に沿っていた。
しかし、ほとんどの場合、ルーチンはシングルスレッドで実行されています。ヌルポインタチェックのオーバーヘッドは気にしません。これは非常に遅いARM9プロセッサ上で実行され、サイクルごとにカウントされます。
実際には、nullポインタのチェックとプロファイルを使用して、そのコストを確認していますが、もっと良い方法があるかどうかは疑問です。たとえば、ヌルオブジェクトパターン、またはライブラリがコールバックを呼び出すなどです。