Почему статическая переменная в классе имеет одинаковое значение во всех потоках?
Статические переменные располагаются не на стеке, а в области данных. Там же, где и глобальные переменные. Для того, чтобы объявлять потокоспецифичные переменные C++11  ввели  спецификатор thread_local.
Теперь берем книжку C++ для чайников и читаем.
Ну и второе, использовать статическую переменную для остановки треда, это выстрел себе в ногу. При отимизиции и без вы словите разное поведение. Как минимум нужно пометить как volatile (при этом при использовании static переменная будет подвержена оптимизации, в итоге опять будет работать неправильно). А если использовать C++11, то уже лучше std::atomic_flag или std::atomic.