К сожалению, вопрос несколько неоднозначен в отношении того, что считается успешным с точки зрения безопасности потоков. Безопасность потока просто означает, что операция будет работать правильно, если выполняются несколько потоков.
Недостаточно то, должен ли классA.methodA или classA.methodB завершить работу с классомB.myVar перед другим потоком, вызывающим классA.methodA (...) или classA.methodB (...). Он определит, какой тип блокировки вам понадобится.
Например, если вам нужна гарантия на чтении значения, он будет выглядеть следующим образом:
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
}
}
}
В другом примере, если b.myVar некоторый тип коллекции, которая должна быть синхронизирована, как кэш, это выглядело бы так:
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
}
}
}
Основываясь на вашем другом вопросе, вы должны описать ситуацию с более высокого уровня, потому что действительно кажется, что вы идете в неправильном направлении. –