quería confirmar mi comprensión de hilos y de pasar por referencia en C++. ¿Es seguro el siguiente hilo de función?rosca con la seguridad con C++ y que pasa por referencia
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;
}
creo que es seguro para subprocesos. Me gustaría que si alguien puede confirmar mi proceso de pensamiento, o decirme que no tengo idea de lo que estoy hablando :)
Hay dos copias de Sa y Sb en la memoria del proceso. Un conjunto se crea en la pila de Thread1 y el segundo conjunto se crea en la pila de Thread2. Como pasamos por referencia, cada subproceso solo necesita un conjunto de sA y sB en la memoria para ejecutar la llamada de función.
Si hubiéramos pasado por valor, podría haber hasta cuatro copias de sA y sB en la memoria del proceso (cada hilo tiene dos juegos) en algún punto donde ambos hilos estaban controlando el procesador dentro de la llamada de función .
En ningún caso es la memoria compartida aquí, por lo tanto, la función es hilo de seguridad.
Lo siento si esta pregunta es muy sencilla, las discusiones han frito el cerebro :)
Pris
¿Qué es QString? ¿Implementa un operador "=="? Si es así, otro subproceso podría cambiar stringA o stringB durante la ejecución del operador ==, lo que podría hacer que no sea seguro para subprocesos. – user1118321
No veo los hilos en el código publicado. ¿Son 'sA',' sB' y 'someFlag' globales? – ybungalobill