Problem with mutex.lock()
Konstantin Belousov
kostikbel at gmail.com
Mon Feb 11 12:10:12 UTC 2019
On Mon, Feb 11, 2019 at 11:09:29AM +0000, Banta Plan wrote:
> I compiled this program and it crashes if executed.
>
> Compiled with: FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1)
>
> ## CMakeLists.txt
> cmake_minimum_required(VERSION 3.13)
> project(mainP)
>
> set(CMAKE_CXX_STANDARD 17)
>
> add_executable(mainP main.cpp)
>
> find_package(Threads)
> target_link_libraries(mainP ${CMAKE_THREAD_LIBS_INIT})
>
> ## main.cpp
>
> #include <iostream>
> #include <thread>
> #include <mutex>
> #include <chrono>
> #include <functional>
>
> int main() {
> using namespace std::chrono_literals;
> std::mutex m;
> m.lock();
> std::thread([&] {
> std::cout << "Before sleepFor" << std::endl;
> std::this_thread::sleep_for(2s);
>
> std::cout << "Before unlock" << std::endl;
> m.unlock();
This unlock is performed on the mutex that the calling thread does not
hold the lock on. The behaviour for such case is undefined, from my reading
of C++17 std.
FreeBSD pthread mutexes check this condition.
> std::cout << "After unlock" << std::endl;
>
> }).detach();
> std::cout << "Before lock2" << std::endl;
> m.lock();
> std::cout << "After lock2" << std::endl;
>
> return 0;
> }
> ##
>
> This program compiles and runs under MacOS (Clang Version: Apple LLVM version 10.0.0 (clang-1000.11.45.5)) and
> manjaro arm64 with gcc (GCC) 8.2.1 20180831
>
>
>
> _______________________________________________
> freebsd-toolchain at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
> To unsubscribe, send any mail to "freebsd-toolchain-unsubscribe at freebsd.org"
More information about the freebsd-toolchain
mailing list