Я пишу потокобезопасный класс на C ++. Все общедоступные методы используют блокировки (нерекурсивные спин-блокировки) . Частные методы без блокировки. Итак, все должно быть в порядке: пользователь вызывает публичный метод, он блокирует объект, а затем выполняет работу через приватные методы. Но я получил мертвую блокировку, когда публичный метод вызывает другой публичный метод. Я читал, что рекурсивные мьютексы плохи, потому что их трудно отлаживать. Поэтому я использую stdio C: открытый метод Foo () только блокирует объект и вызывает Foo_nolock () для выполнения всей работы. Но мне не нравятся эти методы _nolock (). Я думаю, что это дублирует мой код.
Итак, у меня есть идея: я сделаю класс BarNoLock без блокировки и потокобезопасный класс Bar, который имеет только один член: экземпляр BarNoLock. И все методы Bar только блокируют этот член и вызывают его методы.
Это хорошая идея или, может быть, есть лучшие образцы / практики? Благодарю.
Обновление: я знаю о прыщах и мостах. Я спрашиваю о многопоточности, а не ООП.