Я кодирую некоторый простой диспетчер графа, и я решил использовать фабричный шаблон для создания ребер для моего графика. Я только начинаю изучать шаблоны дизайна и темы.Threadsafe factory pattern
Я создал фабрику с возвращением некоторые объекты (ребра), метод создания, код:
public Edge<T> CreateEdge(Vertex<T> firstVertex, Vertex<T> secondVertex)
{
var edge = new Edge<T>(firstVertex, secondVertex, _nextIndex);
_nextIndex++;
return edge;
}
А вот моя проблема. Что, если эта фабрика будет разделяться несколькими потоками, возможно, что возвратите несколько ребер с одним индексом.
Какое оптимальное решение этой проблемы?
Должен ли я использовать блокировку или некоторые мьютексы?
Или это вина моих плохих классов дизайна, использование фабрики?
Редактировать # 1: Изменить IncreaseIndex() -> _nextIndex ++; ошибка при написании.
Is NextIndex недвижимость? Это то, что я бы предположил, основываясь на имени, но просто хочу быть уверенным. – konkked
Да, моя ошибка при вводе текста. Исправлено –
Возможно, вы захотите сделать шаг назад и подумать о том, хотите ли вы, чтобы несколько потоков мутировали график одновременно. Совместное измененное состояние с потоком может очень сложно, очень быстро. Могут быть другие способы структурирования вашей проблемы, чтобы вы могли работать параллельно на хорошо изолированных фрагментах данных с минимальной синхронизацией между потоками. –