2011-01-14 4 views
3

Доброе утро,Многопоточный доступ к памяти

Скажем, у меня есть 6 различных потоков, и я хочу, чтобы одни и те же данные, с каждым из них в то же время. Могу ли я сделать переменную класса с данными, которые я хочу предоставить, и сделать каждый поток доступным к этой памяти одновременно без снижения производительности, или предпочтительнее передавать истинную копию данных в каждый поток?

спасибо.

+0

Вы не говорите, если они просто читают его или также записывают обратно. –

+0

Не написание, только чтение! – Miguel

+0

, тогда применяется моя первая маркерная точка; просто поделитесь им –

ответ

10

Всё зависит исключительно от данных;

  • если данные неизменны (или изменчивый, но вы на самом деле не мутировать его), а затем бросить все нити у него - большие
  • , если вам нужно, чтобы мутировать, но никакие две нити никогда не будет зависеть на данные, измененные другим - отлично
  • , если вам нужно его мутировать, и есть конфликты, но вы можете разумно синхронизировать доступ к данным, так что нет никакого риска блокировки двух потоков и т. д. - отлично, но не всегда тривиально
  • , если небезопасно делать какие-либо предположения, то истинным клоном данных является безопасный подход, но имеет наибольшие накладные расходы с точки зрения дублирования данных; если данные дешевы для копирования, это может быть хорошо - и действительно может превзойти синхронизацию
  • если нити do взаимодействуют друг с другом, тогда у вас нет другого способа, кроме как выяснить какую-то разумную стратегию блокировки ; опять же - к стрессу: тупики проблема здесь - некоторые идеи:
    • всегда обеспечивает тайм-аут при получении блокировки
    • если вам нужно заблокировать два элемента, это может помочь, чтобы попробовать блокировки и охотно (а не блокировка одного в начале, а вторая после того, как вы сделали много изменений), - тогда вы можете просто освободить и повторно взять блокировки, не отменяя изменения, или возвращать изменения в конкретное состояние.
+0

+1. Я начал писать ответ, но ничего не мог добавить к тому, что вы написали ... – Aliostad

Смежные вопросы