"U.Mutlu" <for-gm...@mutluit.com> writes: > Hi, > on this page: > http://en.cppreference.com/w/cpp/thread/recursive_mutex/try_lock > they give the following C++11 example: > > #include <iostream> > #include <mutex> > > int main() > { > std::mutex test; > if (test.try_lock()==true) { > std::cout << "lock acquired" << std::endl; > test.unlock(); //now unlock the mutex > } else { > std::cout << "lock not acquired" << std::endl; > } > > test.lock(); //to lock it again > if (test.try_lock()) { //true can be left out > std::cout << "lock acquired" << std::endl; > } else { > std::cout << "lock not acquired" << std::endl; > } > test.unlock(); > } > > and they say it would give this output: > Output: > lock acquired > lock not acquired > > I wonder why my compiler (g++ 4.9.2 from Debian repo) gives a different > output: > lock acquired > lock acquired > > Which compiler is wrong, and why?
AIUI, neither is wrong. The code violates the preconditions of try_lock(), and therefore results in undefined behavior. -- http://www.greenend.org.uk/rjk/ _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org https://lists.gnu.org/mailman/listinfo/help-gplusplus