c ++ два потока, разделяющие несколько целочисленных переменных - PullRequest
0 голосов
/ 30 сентября 2019

Я кодирую плагин аудиоэффектов, и я довольно новичок в C ++.

У меня есть несколько головок для чтения / записи для некоторых буферов, которые должны быть разделены между двумя потоками (один поток обработки аудио, один поток FFT / анализ).

Для большинства всех этих целых чисел (индексов в буферах) я придумал способ, которым для записи нужен только один поток, а другой может просто читать. Однако одна головка чтения должна быть доступна для записи из обоих потоков.

Мой наивный вопрос о C ++: какие типы я должен использовать для этих целочисленных переменных?

  1. int volatile?
  2. std :: atomic_int ?

Последний вопрос: для целых чисел, которые доступны только для записи в одномместо, я могу сойти с рук, просто приведя их как const в этих прочитанных темах?

1 Ответ

4 голосов
/ 30 сентября 2019
  1. int volatile?

Нет. Вам нужна синхронизация между потоками. volatile не обеспечивает то, что вам нужно.

std :: atomic_int?

Да. Операции на std::atomic являются поточно-ориентированными.

Последний вопрос: для целых чисел, которые могут быть записаны только в одном месте, могу ли я обойтись, просто приведя их как const внутри этих потоков чтения?

Если он изменен в другом потоке, то вам нужна синхронизация. Приведение к консту не помогает.

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