Node.jsはシングルスレッドで動作するため、スレッドセーフや排他制御については考慮しなくてよいと思っていました。イベントループによって実行される処理は1つだけであり、途中で他のスレッドなどから割り込まれることはないからです。 しかし、実際にはI/O待ちやsetTImeout関数のようなタイマーを使った処理や非同期処理により、処理がイベントループが複数にまたがる場合、あいだで別の処理がおこなわれる可能性があります。 (イベントループについてはこの記事が参考になるかもしれないです:描いて理解するイベントループ - Qiita) なので、処理ごとに数を増やすカウンターやシングルトンパターンでのイ…