Нужна такая хитрая конструкция. Проще всего объяснить её на примере с critical section.
Открывается файл — и создаётся critical_section "привязанный" к имени файла, если другой поток пытается открыть тотже файл то он попадает в waiting пока тот первый кто открыл не закроет файл. Ествественно всё будет в своих классах закрыто и доступ централизованный — но, пока кроме как вариант со списком ничего в голову не приходит. Может есть какое красивое решение?