Por desgracia, la cuestión es algo ambiguo sobre lo que se considera éxito en términos de seguridad de los subprocesos. La seguridad del subproceso solo significa que la operación funcionaría correctamente si se están ejecutando varios subprocesos.
Lo que parece ser que falta es si classA.methodA o classA.methodB necesita terminar su operación con classB.myVar antes de cualquier otro hilo llamando a classA.methodA (...) o classA.methodB (...) Determinaría qué tipo de patrón de bloqueo necesitaría.
Por ejemplo, si necesita una garantía en la lectura de un valor, que se vería como la siguiente:
public class classA
{
private classB b = new classB();
public void methodA()
{
lock (b)
{
// Operation without calling methodA() or methodB()
// Read b.myVar
// Update b.myVar
}
}
public void methodB()
{
lock (b)
{
// Operation without calling methodA() or methodB()
// Read b.myVar
// Update b.myVar
}
}
}
En otro ejemplo, si b.myVar es algún tipo de colección que necesita ser sincronizado como un caché, se vería así:
public class classA
{
private classB b = new classB();
public void methodA()
{
// Read b.myVar for missing collection item
lock (b)
{
// Check for missing collection item again. If not missing, leave lock
// Operation without calling methodA() or methodB()
// Read b.myVar
// Update b.myVar with new array item
}
}
public void methodB()
{
// Read b.myVar for missing collection item
lock (b)
{
// Check for missing collection item again. If not missing, leave lock
// Operation without calling methodA() or methodB()
// Read b.myVar
// Update b.myVar with new array item
}
}
}
Según su otra pregunta, debe describir la situación desde un nivel superior porque realmente parece que va en la dirección incorrecta. –