В настоящее время в нашей команде в настоящее время обсуждается, чтобы изменить заблокированное ожидание в бесплатном блоке. Поэтому следует игнорировать как барьера памяти.
global:
Код: Выделить всё
_Atomic int request = 0;
_Atomic int reply = 0;
char image[640 * 640];
mutex_t mu;
cond_t cv;
Код: Выделить всё
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);
Код: Выделить всё
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
Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-visible