我正在编写一个简单的 C++ 程序来演示锁的使用。我在用codeblocks
and gnu
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;
}
我收到以下错误:mutex in namespace std does not name a type
.
为什么我会收到此错误?
编译器不支持使用锁吗?
我碰巧也在看同样的问题。 GCC 可以很好地工作std::mutex
在Linux下。然而,在 Windows 上情况似乎更糟。在 MinGW GCC 4.7.2 附带的 头文件中(我相信你也在使用 MinGW GCC 版本),我发现互斥类是在以下定义的#if
guard:
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
遗憾的是,_GLIBCXX_HAS_GTHREADS
没有在 Windows 上定义。运行时支持根本不存在。
您可能还想直接在 MinGW 邮件列表上提问,以防一些 GCC 专家可以帮助您。
编辑:MinGW-w64 项目提供必要的运行时支持。查看http://mingw-w64.sourceforge.net/ and https://sourceforge.net/projects/mingw-w64/files/。另外,正如 0xC0000022L 指出的那样,您需要下载 POSIX 线程版本(我上次没有提到)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)