自前アロケータのマルチスレッド対応について。

// 自前アロケータmalloc
void *malloc(size_t size)
{
	pMutex->Lock();
	// 16バイトアライメントで空き容量取得して使用済みにする。
	MEMORY_TAG *tag = FindFreeTag(16, size);
	tag->bUse = true;
	pMutex->Unlock();

	return tag->buff;
}

// 自前アロケータのfree()
void MyFree( void *ptr )
{
	// メモリ管理タグから該当のタグを探して未使用領域にする。
	pMutex->Lock();

	MEMORY_TAG *tag = FindTag( ptr );
	tag->bUse = false;

	pMutex->Unlock();


	// 空きメモリを他の空きメモリと結合させる
	// この関数の中で「pMutex」のロックをしてるらしい。
	CompactionTag( tag );
}
ノンプリエンプティブな環境だと問題なかったんだけれど、
プリエンプティブな環境に持ってきたら吹っ飛んだw
当然だけど。

こんなコード書きながら、得意げにどや顔する彼に何て言えば良いでしょうか。