Потоковая безопасность структур данных, куда добавлять примитивы синхронизации?

Это вопрос дизайна, который уже давно меня беспокоит. На самом деле это довольно просто: когда вы предоставляете библиотеки структур данных, вы встраиваете примитивы безопасности потоков или просто предоставляете конструкции и позволяете системе, использующей их, решать, как реализовать фактические операции.

Быстрый пример, круговой буфер, который поддерживает модель производителя и потребителя. 2 метода, Get и Write, каждый обновляет счетчик заполнения глобальной переменной. Теперь вы можете просто предоставить мьютексы для блокировки и позволить коду, использующему буфер, захватить мьютексы ИЛИ выполнить внутреннюю блокировку и обеспечить взаимное исключение из коробки.

Похоже, что в STL это делается извне, но есть причины производительности, по которым вы хотели бы обеспечить более тонкую блокировку.

Мысли?

7
задан creatiwit 3 February 2012 в 16:38
поделиться