help-gplusplus
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Compiler gives wrong output


From: U.Mutlu
Subject: Re: Compiler gives wrong output
Date: Tue, 9 Jun 2015 23:22:20 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0 SeaMonkey/2.37a1

Richard Kettlewell wrote on 06/09/2015 10:16 AM:
"U.Mutlu" <for-gmane@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.

Mystery solved: when using such concurrency/thread objects,
then one has to link with pthread (-lpthread):
 g++ -Wall -O2 -std=gnu++11 file.cpp -lpthread
Now my compiler gives the same result.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]