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

Я хотел подтвердить свое понимание потоков и передачи по ссылке в C ++. Является ли следующая функция потокобезопасной?

QString sA = "hello";
QString sB = "world";
bool someFlag = AreStringsEqual(sA,sB);

...

bool AreStringsEqual(QString const &stringA, QString const &stringB)
{
    if(stringA == stringB)
    {   return true;   }

    return false;
}

Я думаю, что она потокобезопасна Я бы хотел, чтобы кто-нибудь мог подтвердить мой мыслительный процесс или сказать, что я понятия не имею, о чем говорю :)

  • В памяти процесса есть две копии sA и sB. Один набор создается в стеке Thread1, а второй набор создается в стеке Thread2. Поскольку мы передали по ссылке, каждому потоку нужен только один набор sA и sB в памяти для выполнения вызова функции.

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

  • Здесь ни в коем случае не используется совместно используемая память, поэтому функция потокобезопасна.

Извините, если этот вопрос очень простой, потоки сожрали мне мозг :)

Pris

5
задан Prismatic 3 January 2012 в 06:32
поделиться