36

ロックの使用方法を示す簡単な C++ プログラムを作成しています。私はコンパイラを使用codeblocksしています。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.

このエラーが発生するのはなぜですか? コンパイラはロックの使用をサポートしていませんか?

4

11 に答える 11

3

MingW-W64 7.2.0 を使用しているときに、この同じ問題に遭遇しました。mingw-64 ダウンロード ページからいくつかの異なる Windows ビルドをテストしたところ、MinGW-W64 GCC-8.1.0がライブラリをサポートしmutex、含まれていることがわかりました。pthreadインストール時に、次のオプションを選択しました。

  • x86_64
  • posix
  • せー

に基づく私のマルチスレッド コードpthreadsは、Windows と Linux の両方で変更なしでクリーンにコンパイルおよび実行されます。

Windows 8.1にインストールされたMingWバージョン

このバージョンは、CygWin 環境やパッケージ マネージャーがないため、私が使用していた 7.3.0 ビルドよりもスリムです。また、Makefile を変更する必要がないようにコピーmingw32-make.exeしました。make.exeインストーラーは、Windows の [スタート] メニューに [ターミナルの実行] リンクを作成します。

MingW を使用して Windows 8.1 で pthread アプリケーションをビルドして実行する

于 2018-11-18T16:47:35.457 に答える
1

誰にとってもうまくいくかどうかはわかりませんが、それ以外の場合は、ndk を更新するだけです。私は ndk-r11c を使用していますが、完全に動作します。

于 2016-06-03T08:14:17.097 に答える
0

WinGW の代わりに Cygwin をインストールしました。YouTube の手順 https://www.youtube.com/watch?v=DAlS4hF_PbY&t=245s

于 2020-10-13T19:41:00.980 に答える