Tengo algunas preguntas sobre el uso de bloqueo para proteger mi estructura de datos compartidos. Estoy usando C/C++/ObjC/ObjC++Multithreading: ¿necesito proteger mi variable en el método de solo lectura?
Por ejemplo, tengo una clase de contador que usan en el entorno multi-hilo
class MyCounter {
private:
int counter;
std::mutex m;
public:
int getCount() const {
return counter;
}
void increase() {
std::lock_guard<std::mutex> lk(m);
counter++;
}
};
¿Es necesario utilizar
std::lock_guard<std::mutex> lk(m);
engetCount()
método para hacerlo ¿a salvo de amenazas?¿Qué sucede si solo hay dos hilos: un hilo de lectura y un hilo de escritor entonces, ¿tengo que protegerlo? Como solo hay un hilo modificando la variable, creo que no ocurrirá ninguna actualización perdida.
Si hay varios escritor/lector para una variable de tipo primitiva compartida (por ejemplo,
int
) ¿qué desastre puede ocurrir si solo bloqueo el método de escritura pero no el método de lectura? ¿El tipo de 8bits marcará la diferencia en comparación con el tipo de 64 bits?¿Hay algún tipo primitivo que sea atómico por defecto? Por ejemplo, escribir en un
char
es siempre atómico? (Sé que esto es cierto en Java, pero no sé de C++ y estoy usando el compilador LLVM en Mac si las cosas plataforma)
"C/C++/ObjC/ObjC++" Estos son todos los idiomas completamente diferentes. Elegir uno; parece que eligió C++. – GManNickG
Estoy usando ObjC para GUI y C++ para backend y ObjC++ para combinarlos. También ObjC++ es superconjunto de otros. Escojo C++ como ejemplo. –
Eso es bueno, pero no los combine en una lista como uno solo. :) Solo di que estás interesado en una respuesta en cuatro idiomas diferentes. – GManNickG