Сфера не заказа поручить ios с барьером памяти или замком - PullRequest
1 голос
/ 08 апреля 2020

Я не смог найти информацию о том, в какой области компилятор прекращает делать команды, переупорядочивая, когда видит блокировку или барьер памяти.

Например, в приведенном ниже псевдокоде со ссылкой на c ++ lang

Есть ли разница в порядке следования инструкций на a,x в случаях, когда lock перемещается в отдельную функцию bar по сравнению с функцией foo?

Являются ли ответы одинаковыми если lock заменяется полным барьером памяти?

int func foo()
{
  read a;
  x = 10;
  {
      lock(mutex);
      z++;
      unlock(mutex);
  }
  a += 1;
  return x;
}

против

int func foo()
{
  read a;
  x = 10;
  bar();
  a += 1;
  return x;
}

func bar()
{
      lock(mutex);
      z++;
      unlock(mutex);
}
...