http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55471
Bug #: 55471 Summary: c++ mutex does not work as expected Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: gust...@atc.ugr.es Created attachment 28780 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28780 source code with the bug In a small test with a mutex it does not block all threads. The bug is triggered by the place the mutex is declared: * When the mutex is declared global it does not work. * When it is a local variable it does work.#include <iostream> #include <mutex> #include <thread> std::mutex m; // this program fails when m is a global variable int main() { const unsigned N = 10; // std::mutex m; // with m here everything is allright for(unsigned i = 0; i < N; ++i) new std::thread([&]() { while(true) { m.lock(); std::cout << "[" << std::this_thread::get_id() << "]: "; for(unsigned i = 0; i < 10; ++i) std::cout << i; std::cout << std::endl; m.unlock(); } }); std::this_thread::sleep_for(std::chrono::seconds(1)); }