Какие барьеры памяти мне нужны, чтобы записаться на изображение в потоке видимым в потоке B?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Какие барьеры памяти мне нужны, чтобы записаться на изображение в потоке видимым в потоке B?

Сообщение Anonymous »

Куда мне нужно положить барьеры памяти? Запись на изображение в потоке A должно быть видно в потоке B? Пятна помечены в примере псевдода и получены из этого вопроса/ответа.
В настоящее время в нашей команде в настоящее время обсуждается, чтобы изменить заблокированное ожидание в бесплатном блоке. Поэтому следует игнорировать как барьера памяти.
global:

Код: Выделить всё

_Atomic int request = 0;
_Atomic int reply = 0;
char image[640 * 640];

mutex_t mu;
cond_t  cv;
поток a:

Код: Выделить всё

int last_req = 0
int curr_req = request;

if (curr_req != last_req)
{
last_req = curr_req;
char* buff = GetBufferFromCamera(.....);
memcpy(image, buff, sizeof(image));
atomic_thread_fence(memory_order_release);  // Okay?
}

mtx_lock(&mu);
reply = curr_req;
cnd_signal(&cv);
mtx_unlock(&mu);
поток B:

Код: Выделить всё

int ticket = atomic_fetch_add(&request, 1);
ticket++;
mtx_lock(&mu);
while (ticket != reply)
cond_wait(&cv, &mu);
mtx_unlock(&mu)

atomic_thread_fence(memory_order_acquire); // Okay?

// I want to use image

в качестве бокового примечания: я на ARM8.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-visible
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»