我正在Windows上安装mingw-w64,有两个选项:win32线程和posix线程.我知道win32线程和pthreads之间的区别是什么,但我不明白这两个选项之间的区别.我怀疑如果我选择posix线程,它将阻止我调用WinTI函数,如CreateThread.
看来这个选项指定某些程序或库将使用哪个线程API,但是通过什么?通过GCC,libstdc ++还是别的什么?
我发现了这个: 在windows的gcc端口中thread_posixs和thread_win32之间的区别是什么?
简而言之,对于这个版本的mingw,threads-posix版本将使用posix API并允许使用std :: thread,而threads-win32将使用win32 API,并禁用std :: thread部分标准.
好的,如果我将选择win32线程,那么std :: thread将不可用,但仍将使用win32线程.但用什么?
我的理解是std :: mutex锁定和解锁具有获取/释放语义,这将防止它们之间的指令被移到外面.
因此,获取/释放应禁用编译器和CPU重新排序指令.
我的问题是我看一下GCC5.1代码库,并没有看到std :: mutex :: lock/unlock中的任何特殊内容,以防止编译器重新排序代码.
我在do-pthread-mutex-lock-have-happen-before-semantics中找到了一个潜在的答案,它表示一个外部函数调用充当编译器内存栅栏的邮件.
它总是如此吗?标准在哪里?
我知道这些标志适用于Eclipse中的C++ 11.
但我不知道有什么区别,哪一个更受欢迎.
看起来他们都正常使用C++ 11.