同プロセス内のスレッドなら普通に大域変数をフラグに使わね?
ファイルなんてリソース介したら本末転倒な気がするが…

スレッドとかの高度な機能を実装できないマイコンなんかで、
代わりにハード側の機能で割込を使う場合の、
割込の許可と禁止を制御する専用命令の単純な使い方が真似できる。
並行処理されてはならない処理部分はまず最小化しておいて、
処理に入る直前に割込禁止して、処理終了直後に割込許可する。
単に割込禁止と割込許可で挟むだけ。

しかし禁止・許可の機能はUWSCにないので自作で実装する。
マウス操作であれば、MMVをルーチン内で直接書かず、
自作関数のsafeMMVを定義して、その中で、
・既に割込禁止なら許可されるまで待機(必要に応じタイムアウト)
・割込許可になったら割込禁止して即MMVして即割込許可
・スレッドは必要に応じスレッド番号を生成し、
 フラグを真偽値ではなく0またはスレッド番号という風にすると、
 少しはデバッグがやりやすくなる。

こうすることで、MMV同士の競合はsafeMMVを使うことで意識すること無く解決し、
MMVとその他の処理との競合は、その他の処理の方を禁止と許可で挟めば良い。