Как я могу реализовать потокобезопасную оболочку списка в Delphi?

У меня есть список оболочки, который поддерживает два Tstringlist и TClassList

Мне нужно, чтобы это было потокобезопасно, так что

Одновременные записи не допускаются (должно быть введено какое-то состояние ожидания)Чтение во время записи (или наоборот) недопустимо (необходимо ввести какое-то состояние ожидания)Одновременное чтениеявляются позволил

Любые идеи о том, как я могу это сделать? Мой инстинкт подсказывает мне, что ему нужен не только критический раздел, возможно, семафор или «счетчик использования», возможно, один из них вконъюнкция с CS.

Я просто не совсем уверен, с чего начать - все, от общего подхода на английском языке до псевдо-кода, до реализации на Delphi или внешней ссылки, будет высоко ценится.