タグ

マルチスレッドに関するdelegateのブックマーク (17)

  • マルチスレッド・プログラミングの道具箱

    まえがき クラウド上の仮想サーバから手元のスマートフォンまで、いまや複数のCPUコアを搭載するマルチコアはどこにでもある環境になりました。ハードウェア側が並列(Parallel)・並行(Concurrent)処理に向けて急速に進化する一方で、ソフトウェア側つまりプログラミング言語の進化はさほど追い付いていません。並行処理記述の手軽さを求めた Go言語 や、マルチスレッド処理の安全性を重視する Rust言語 などが登場してはいるものの、「普通にプログラムを記述するだけで複数CPUコア環境で高速に走るプログラミング言語」は遠い夢物語のままです。 モダンなプログラミング言語や並列・並行処理ライブラリは、複雑で難解なマルチスレッド処理を直接記述しなくてすむよう、安全性・利便性の高い抽象化レイヤを提供します(例:Go言語のgoroutineとchannel、Rust言語の Rayonライブラリ)。し

    マルチスレッド・プログラミングの道具箱
  • Im trying to use OpenGL with the windows API on different threads

  • OpenGLを使ってみる。その4 -描画スレッド- - while( c++ );

    リアルタイムな描画を行うために、描画スレッドを導入します。 一般的にはメインスレッド内でPeekMessageを使ってwindowsイベントを処理し、 アイドル時に描画する形になると思いますが、 メインスレッドはwindowsイベントに専念し、サブスレッドで描画してみます。 サンプル opengl04.zip VC++2008EEで作成 opengl.exeを実行してください 描画スレッド boost::threadのようにテンプレートで実装したいところですが、 無駄に規模が大きくなりそうなので、もっと単純なスレッドクラスを作ってみます。 thread_baseクラス 最小限のスレッド基底クラス 派生クラスでrunを実装する class thread_base { private: HANDLE handle; HANDLE end_event; HANDLE stop_event; pu

    OpenGLを使ってみる。その4 -描画スレッド- - while( c++ );
  • もんしょの巣穴 - OpenGLの話 第5回

    OpenGLにおけるマルチスレッド 14/02/16 up 今回はOpenGLにおけるマルチスレッドの話をサンプル交えながら行います。 昨今の複数コアCPUで十分なパフォーマンスを発揮するにはマルチスレッドを活用する必要があります。 DirectX11でのマルチスレッド活用も踏まえて解説していきたいと思いますのでよろしくお願いします。 さて、グラフィクスにおけるマルチスレッドとして考えられるものは何でしょう? 私は3つの活用法がまず思い浮かびます。 今回はそのうちの1つをOpenGLで実装しているだけですので、サンプルとしては弱いかもしれませんが、お許しを。 まず1つ目は描画スレッドの活用でしょう。 これはグラフィクスAPI(OpenGLやDirectX)というよりは、それらをラップするライブラリでの実装に起因する問題となると思います。 基的なゲームの処理は大きく分けるとアップデートと描

  • C/C++によるマルチスレッドプログラミング入門 - Qiita

    はじめに この記事はマルチスレッドプログラミング未経験者orこれから始めていく人向けの記事です。 すでにマルチスレッドでゴリゴリコードを書いてる人が読んでも得るものはないと思います。 また筆者はプログラマとしては半人前もいいとこなので誤り等ありましたら遠慮なく指摘していただけると助かります。 マルチスレッドとは まずマルチスレッドでないプログラム、シングルスレッドのプログラムを見てみましょう。 図のようにシングルスレッドの場合は処理を上から順番に実行していきます。 ループ等で上に戻ることもありますが、基的に別の処理が同時並行して行われるということはありません。 処理1を実行し、処理1が終われば処理2を行い、処理2が終われば処理3を行う… といったように処理を順次実行していきます。 入門書に書かれているようなプログラムは大抵がシングルスレッドだと思います。 これがマルチスレッドになると以下

    C/C++によるマルチスレッドプログラミング入門 - Qiita
  • Re[6]: MFC マルチスレッドについて

    分類:[C/C++] こんにちは、Jittaです。MFC のマルチ スレッドについて、教えてください。 UI を持つスレッドから、通信スレッドを起動しています*1。このとき、通信スレッドに CResizingDialog を継承したダイアログ クラスのオブジェクトを引き渡しています。 通信スレッドでは、通信の結果を‘ダイアログにあるリスト ビューへ書き込んでいます’。 また、‘ダイアログの公開フィールドにある、CObjArray を操作しています’。 MFC の知識がほとんど無いので尋ねたいのですが、 これらの(引用符で囲った)操作は、スレッド セーフでしょうか。 疑問に思う理由: .NET Framework では、Invoke メソッドを利用して、コントロールのもとになるウインドウ ハンドルを持つスレッドで行わなければならない。 MFC では、「ワーカー スレッド」と「ユーザー インタ

  • MFCの基礎 - マルチスレッド

    概要 MFCアプリケーションにおいて、マルチスレッドを使用する方法について記述する。 作成手順 まず、クラスにワーカースレッド関数(静的)とワーカースレッド体の関数を追加する。 ワーカースレッド体の関数では、静的でないメンバ変数およびメンバ関数が使用できる。 ワーカースレッド関数では、静的でないメンバ変数およびメンバ関数が使用できないと考えている人がいるが、 下記のサンプルコードのようにすればクラスの関数はワーカースレッド関数にて行うことができる。 サンプルコード // CFileView.h class CFileView { private: CWinThread *m_pLoadXMLThread public: static UINT LoadXMLThreadFunc(void* pParam); // XMLファイル読み込み時のスレッド制御関数 void LoadXMLTh

  • 【C#】マルチスレッドとIEnumerableを組み合わせる際の注意点 - LIGHT11

    C#でマルチスレッドとIEnumerableを組み合わせる際の注意点についてまとめました。 はじめに IEnuemrableをサブスレッドから返すことを考える サブスレッドで行う処理にIEnumerableを渡すことを考える はじめに C#ではTaskなどのクラスを使うことでマルチスレッドで処理を行えます。 またIEnumerableを使うと処理を遅延評価できます。 共に便利な機能ですが、これらを組み合わせて使った際に使い方を間違えると、 実はマルチスレッドで処理が行われていなかったり、 まとめられるはずの評価処理がすべてのスレッドで行われたりします。 記事ではこのあたりについてまとめます。 IEnuemrableをサブスレッドから返すことを考える 今以下のようにIEnumerable<string>を返す処理SomeHeavyEnumerable()をサブスレッドに逃がすことを考えます

    【C#】マルチスレッドとIEnumerableを組み合わせる際の注意点 - LIGHT11
  • MFC マルチスレッド - MyMemoWikiOld

  • MFC マルチスレッドの使い方

    :::::::::::MFC マルチスレッドの使い方::::::::::: 重たいファイルの読み込み処理や変換など、いちいち待つ意味ないです。 エディタならその間も作業できなきゃいけません。 今回はMFCにてマルチスレッドを使う方法についてまとめます。 ということで SimpleConver に実際に導入した例をもとに、実装の詳細を示します。 まずは別スレッドにて行いたい関数を作ります。 次の例にならい、クラスに静的な関数(スレッド関数)とスレッド処理体の関数を追加しましょう。 スレッド処理体ではクラスの静的でないメンバ変数とか関数が使えます。 スレッド関数内では静的でない(static のつかない)メンバ変数や関数が 使えないと思っている人がいるようですが、そんなことないです。 今回のようにすれば、クラスの関数はどれでも別スレッドで行うことができます。 あとは注意事項として次のことを

  • C++ マルチスレッド 入門

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami

    C++ マルチスレッド 入門
  • スレッドセーフな配列(List,Dictionary,Queue,Stack)を作成する。(SyncRoot,Synchronized)ジェネリック版。 - tekkの日記 C#,VB.NET

    的に配列の操作はスレッドセーフではないので(あるスレッドが配列に追加・削除している途中で、別スレッドでFor Eachしたら正しく列挙できない)マルチスレッドで配列のデータを操作する場合は、同時に実行されないようにロックする必要があります。 非ジェネリックな配列の型の場合、SyncRootプロパティ、Synchronizedメソッドがありましたがジェネリック型ではIntellisenseに表示されません。ですが、実装されていない訳ではなく、SyncRootの場合はICollectionインタフェースを通じて、Synchronizedメソッドの場合は非ジェネリック型の静的メソッドを通じて、スレッドセーフ化することが出来ます。 ■lockステートメントによるスレッドセーフ化 using System; using System.Collections; using System.Colle

    スレッドセーフな配列(List,Dictionary,Queue,Stack)を作成する。(SyncRoot,Synchronized)ジェネリック版。 - tekkの日記 C#,VB.NET
  • NETマルチスレッド・プログラミング入門 - @IT

    メディア ローコード/ノーコードセントラル クラウドネイティブセントラル 連載一覧 @IT Special セミナー ホワイトペーパー クラウド AI IoT アジャイル/DevOps セキュリティ キャリア&スキル Windows 機械学習 eBook その他 Server & Storage HTML5 + UX Smart & Social Coding Edge Java Agile Database Expert Linux & OSS Master of IP Network Security & Trust System Design Test & Tools Insider.NET ブログ AI for エンジニアリング サプライチェーン攻撃 脆弱性管理 OSS管理 Windows 11/365 GitHub その他の特集 @IT アジャイル/DevOps Insider.

  • インテルTBB:Flow Graphによるデータフロープログラミング

    #ifndef UTILS_H_ #define UTILS_H_ #include <chrono> #include <cstdio> #include <iostream> // durationミリ秒のビジーウェイト void busy_wait(int duration) { using namespace std::chrono; auto start = high_resolution_clock::now(); auto stop = start; do { stop = high_resolution_clock::now(); } while ( duration_cast<milliseconds>(stop - start) < milliseconds(duration)); } // めっちゃ遅いかけ算とたし算 template<typename T> inli

    インテルTBB:Flow Graphによるデータフロープログラミング
  • マルチスレッドを意識しないマルチスレッド・ライブラリ「Intel Concurent Collections」がおもしろい

    「Intel Concurrent Collections for C++」(CnC)とは 実際並列処理はややこしいしおっかないです。大きなキッチンで大勢のコックが包丁とフライパン振り回しているようなもので、ほっとけばしっちゃかめっちゃかになっても不思議じゃない。各人はそれぞれの役割に専念し、他人のふるまいを気にせず勝手に働きながらも全体としては統制のとれた動きを作り出さにゃなりません。mutexで排他制御したりjoinで完了を待ったり、さまざまな道具を駆使して統制のとれた動きを作り出しているのはプログラマであり、そこがいちばん難しく悩ましいところです。 C++,C#あるいはVB,Javaもそうですが、コードは原則的に並べた順に実行されます。 と書けば、まずf()、それが終わればg()、しかるのちh()の順で呼び出されます。たとえこの3つをどの順にやっても(あるいは同時にやっても)構わない

  • XLsoft エクセルソフト : マルチスレッド・アプリケーション開発のためのインテル・ガイド

    開発ツールスイート インテル® oneAPI ベース・ツールキット インテル® HPC ツールキット インテル® レンダリング・ツールキット インテルの AI ツール クラウド・プラットフォーム インテル® デベロッパー・クラウド コンパイラー インテル® oneAPI DPC++/C++ コンパイラー インテル® Fortran コンパイラー インテル® Fortran コンパイラー・クラシック NVIDIA*/AMD* GPU 向け Codeplay プラグイン パフォーマンス・ライブラリー インテル® oneMKL インテル® IPP インテル® oneTBB インテル® oneDAL インテル® MPI ライブラリー 分析、解析ツール インテル® VTune™ プロファイラー インテル® Inspector インテル® Advisor インテル® Trace Analyzer &

  • 並列処理を行うための基礎知識(Visual C++)(1/2) - @IT

    書籍転載 文法からはじめるプログラミング言語Microsoft Visual C++入門 並列処理を行うための基礎知識(Visual C++) ――第13章 並列処理~マルチスレッドプログラミング(前編)―― WINGSプロジェクト 矢吹 太朗(監修 山田 祥寛) 2010/04/13 コーナーは、日経BPソフトプレス発行の書籍『文法からはじめるプログラミング言語Microsoft Visual C++入門』の中から、特にInsider.NET読者に有用だと考えられる章や個所をInsider.NET編集部が選び、同社の許可を得て転載したものです。基的に元の文章をそのまま転載していますが、レイアウト上の理由などで文章の記述を変更している部分(例:「上の図」など)や、図の位置などをサイトのデザインに合わせている部分が若干ありますので、ご了承ください。『文法からはじめるプログラミング言語M

  • 1