Товарищи, подскажите пожалуйста, является ли следующий код thread-safe:
class A
{
private int _something;
public void Foo()
{
_something = 1;
Thread thread = new Thread(Bar);
thread.Start();
thread.Join();
Assert(_something == 2);
}
private void Bar()
{
Assert(_something == 1);
_something = 2;
}
}
Другими словами, происходит ли синхронизация памяти перед стартом нового потока, и после его завершения, а так же может ли компилятор поменять местами Thread.Start/Thread.Join с другими действиями.
В джава 1.5 такие гарантии имеют место быть (т.е. все будет работать как надо), пол-дня гуглил и читал мсдн — ни слова не нашел про то, как оно работает в C#. Может кто-нибудь дать ссылку, где про это написано?
Если это важно, речь идет о .NET 2.0