命名空间 std 中的 C++ 互斥锁未命名类型

标签 c++ multithreading compiler-errors locking mingw

我正在编写一个简单的 C++ 程序来演示锁的使用。我正在使用 codeblocksgnu gcc 编译器。

 #include <iostream>
 #include <thread>
 #include <mutex>
 using namespace std;
 int x = 0; // shared variable

 void synchronized_procedure()
 {
    static std::mutex m;
    m.lock();
    x = x + 1;
    if (x < 5)
    {
       cout<<"hello";
    }
    m.unlock();

 }

int main()
{

   synchronized_procedure();
   x=x+2;
   cout<<"x is"<<x;
}

我收到以下错误:命名空间 std 中的互斥量没有命名类型

为什么会出现此错误? 编译器不支持使用锁吗?

最佳答案

我碰巧遇到了同样的问题。 GCC 在 Linux 下与 std::mutex 一起工作得很好。但是,在 Windows 上,情况似乎更糟。在 MinGW GCC 4.7.2 附带的 头文件中(我相信您也使用了 MinGW GCC 版本),我发现 mutex 类是在以下 #if 保护下定义的:

#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)

很遗憾,_GLIBCXX_HAS_GTHREADS 未在 Windows 上定义。运行时支持根本不存在。

您可能还想直接在 MinGW 邮件列表上提问,以防 GCC 专家可以帮助您。

编辑:MinGW-w64 项目提供了必要的运行时支持。查看 http://mingw-w64.sourceforge.net/https://sourceforge.net/projects/mingw-w64/files/ .另外,正如 0xC0000022L 所指出的,您需要下载 POSIX 线程版本(我上次没有提到)。

关于命名空间 std 中的 C++ 互斥锁未命名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14191566/

相关文章:

java - 使用 RandomAccessFile 在 Java 中通过多线程下载不正确的文件

c++ - 编译SDL2代码时出错

c++ - 无法使用 unique_ptr 和 deleter 进行编译

c++ - Internet Explorer BHO 检查站点的多实例

c++ - 对象和静态位置之间的堆比较

c++ - boost::trim_right_if 和空字符

C++ 错误 : use of deleted function during constructor call of custom class

c++ - 界面与组合

c# - 哪些特性使类成为线程安全的?

c# - 为什么只允许UI线程修改UI?