У меня есть два потока. Они имеют массив. Один из потоков добавляет новые элементы в массив (и удаляет их), а другой использует этот массив (только операции чтения). Нужно ли мне блокировать массив, прежде чем добавлять/удалять его/из него или читать из него?
Дополнительная информация:
- Мне нужно будет продолжать итерацию по всему массиву в другом потоке. Здесь нет операций записи, как упоминалось ранее. "Просто сканировать что-то вроде кругового буфера фиксированного размера"
- В таких случаях легко использовать блокировку. Однако блокировки могут быть очень медленными. Я не хотел использовать блокировки, если их использование можно избежать. Также, как выяснилось из обсуждений, может быть необязательно (на самом деле это не так) блокировать все операции над массивом. Достаточно просто заблокировать управление итератором для массива (счетчик, который будет использоваться другим потоком)
Я не думаю, что вопрос "слишком широк". Если это все равно, дайте мне знать. Я знаю, что вопрос не идеален. Мне пришлось объединить как минимум 3 ответа, чтобы решить этот вопрос, который говорит о том, что большинство людей не смогли полностью понять все проблемы и были вынуждены выполнять некоторые предположения. Но большинство из них вышло из комментариев, которые я попытался включить в вопрос. Ответы помогли мне решить мою проблему довольно объективно, и я думаю, что предоставленные здесь ответы являются весьма полезным ресурсом для тех, кто начинает многопоточность.