энергозависимый массив с ++ - PullRequest
3 голосов
/ 29 июля 2011

У меня есть приложение, которое имеет массив указателей на MyObject объектов:

MyObject **arr;
arr= new MyObject*[10];

Приложение имеет два потока, эти потоки будут создавать и удалять new MyObject() в массив arr. Поэтому arr[n] будет изменяться все время, однако сами MyObject не изменяются.

Должен ли я просто объявить:

volatile MyObject **arr;

Или я должен идти с:

MyObject ** volatile arr;

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Я думаю, вам нужно MyObject * volatile * arr;.

Обратите внимание, что volatile является , а не атомарной переменной или допустимым методом синхронизации.

Редактировать: Вот оно: http://drdobbs.com/high-performance-computing/212701484

2 голосов
/ 29 июля 2011

Я думаю, что вы используете volatile здесь неправильно. Из Википедии ,

В C и, следовательно, в C ++ ключевое слово volatile было предназначено для

  • разрешить доступ к отображенным в память устройствам
  • разрешить использование переменных между setjmp и longjmp
  • разрешить использование переменных sig_atomic_t в обработчиках сигналов.

Я заметил, что это помечено как многопоточность. У Intel есть хорошая статья о том, почему volatile в основном бесполезен в многопоточности .

Наконец, volatile MyObject **arr; - правильный синтаксис - если это ваше конечное намерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...