У меня есть огромный массив, который должен читаться разными потоками параллельно. Каждый поток должен читать разные записи в разных местах во всем массиве, от начала до конца. Буфер доступен только для чтения, поэтому я не думаю, что требуется «критическая секция».
Но я боюсь, что этот подход имеет очень плохую производительность. Но я не вижу другого способа сделать это. Я мог бы загрузить весь массив в разделяемую память для каждого блока, но я не думаю, что для этого достаточно разделяемой памяти.
Есть идеи?
Редактировать: Некоторые из вас спрашивали меня, почему мне нужен доступ к различным частям массива, поэтому вот несколько объяснений: я пытаюсь реализовать "алгоритм аукциона" . В одном ядре каждый поток (человек) должен делать ставки на предмет, цена которого зависит от его интереса к этому предмету. Каждый поток должен проверить свой интерес к данному объекту в большом массиве, но это не проблема, и я могу объединить чтение в разделяемой памяти. Проблема в том, что, когда поток выбрал ставку за элемент, он должен сначала проверить его цену, и, поскольку есть много объектов, на которые нужно сделать ставку, я не могу перенести всю эту информацию в общую память. Более того, каждый поток должен иметь доступ ко всему буферу цен, поскольку он может делать ставки на любой объект. Единственное мое преимущество в том, что буфер доступен только для чтения.