タグ

スレッドに関するMikatsukiのブックマーク (14)

  • セマフォとmutexの違いは?

    > >一般論としては、Mutexは「カウントを1に限定した」特殊化したSemaphoreです。 > とのことですが、これはWin32以外の環境だと > これ以上の違いはないと言うことでしょうか? 「一般論」と書いた意味を取り落とされているのではないかと思います。 「一般論としては〇〇」なのですから、「Win32以外の環境」も含めて「各論」では「必ずしも〇〇とは限らない」とご理解ください。 なお、ご指摘のとおり、あるリソースを排他的に利用するだけであればMutexを使用するかわりにカウントが1のSemaphoreを使用することができます。(特定の環境での、MutexとSemaphoreの環境依存の動作を除けば、ですが。) ではなぜ2種類が用意されている(用意されている環境が存在する)のかといえば、リソースの排他的利用は非常によくあることなので、これに特化した機能を用意すればより良いであろう、

    セマフォとmutexの違いは?
  • 意味の違いがわかる? タスクとプロセスとスレッド (1/4)

    「マルチタスク」という言葉を目にしたことのない人は、ASCII.jp読者にはまずいないだろう。また、最近ではあまり聞かないが、「タスク」と似たような用語に「ジョブ」がある。そのため、かつては「マルチジョブ」といった表現がされていたこともある。さらに似たような用語として「プロセス」もあり、やはり「マルチプロセス」という用語がある。また、マルチタスクと同じ意味で使われる言葉に、「マルチプログラミング」というものもある。 いずれも意味としては、「複数のアプリケーションを同時に実行できること」を示しているが、どうしてこんなに複数の用語があるのだろう? 理由のひとつは、かつてコンピューターメーカーがOSを作ってたときに、それぞれのメーカーで異なる用語を使っていたことにある。あるメーカーは、アプリケーションを実行することを「タスクを起動」と言い、別のメーカーでは「ジョブを起動」と呼んだわけだ。 今回は

    意味の違いがわかる? タスクとプロセスとスレッド (1/4)
  • BackgroundWorkerクラスを使用して進行状況ダイアログを作成する

    Imports System.ComponentModel Imports System.Windows.Forms ''' <summary> ''' バックグラウンド処理の進行状況を表示するフォーム ''' </summary> Partial Public Class ProgressDialog Inherits Form ''' <summary> ''' ProgressDialogクラスのコンストラクタ ''' </summary> ''' <param name="caption">タイトルバーに表示するテキスト</param> ''' <param name="doWorkHandler">バックグラウンドで実行するメソッド</param> ''' <param name="argument">doWorkで取得できるパラメータ</param> Public Sub Ne

    BackgroundWorkerクラスを使用して進行状況ダイアログを作成する
    Mikatsuki
    Mikatsuki 2017/01/04
    BackgroundWorkerクラスのこと。
  • 多重起動時に起動済みウィンドウを前面表示: DOBON.NETプログラミング掲示板過去ログ

    題名: 多重起動時に起動済みウィンドウを前面表示 著者: DD. 日時: 2012/01/27 22:33:36 ID: 29698 この記事の返信元: (なし) この記事への返信: [29699] Re[1]: 多重起動時に起動済みウィンドウを前面表示 Hongliang 2012/01/28 10:24:37 ツリーを表示 環境/言語:[C#] 分類:[.NET] DD.と申します。 タイトルの通り、多重起動時に起動済みウィンドウを前面表示したいと考えたのですがうまくいかず質問させて頂きました。 C# .Net3.5にてWindowsフォームアプリで作成を行っているのですが、複数フォームが遷移し、遷移した後、元フォームはVisible=falseされ非表示となります。なのでユーザから見えているのは現在アクティブとなっている1画面のみとなります。 調べてみるとProcess.GetPro

  • Lock-freeとWait-freeアルゴリズム - Wikipedia

    Lock-freeとWait-freeアルゴリズムとは、共有データにロックをかけてアクセスを防ぐアルゴリズムとは違い、複数のスレッドが同時並行的に、ある対象データを壊すことなしに読み書きすることを可能にするアルゴリズムである。Lock-free とはスレッドがロックしないことを意味しており、全てのステップにおいてシステムが必ず進行する。これはLock-free ではミューテックスやセマフォといった、排他制御のためのプリミティブを使ってはならないことを意味する。なぜならロックを持っているスレッドの実行が中断した場合、全体の進行を阻止しうるからである。Wait-free とは、他のスレッドの動作に関係なく、スレッドがいかなる操作も有限のステップで操作を完了させられることを指す。あるアルゴリズムがLock-freeであるがWait-freeでないことはありうる。Wait-free なアルゴリズム

  • .NETマルチスレッドプログラミング 2:非同期デリゲートとスレッドプール

    目次 はじめに 対象読者 必要な環境 別スレッドからフォーム、コントロールを扱う Invokeメソッド BeginInvoke・EndInvokeメソッド InvokeRequiredプロパティ MethodInvoker・EventHandlerデリゲート 待機ハンドル ManualResetEvent AutoResetEvent スレッドプール 引数の指定 スレッドプールの制限 非同期デリゲート メソッドの終了を知る コールバックメソッドの使用 非同期メソッド 別スレッドとのデータの受け渡し コールバックデリゲートの使用 Interlockedクラス スレッドの同期を行わずに複数のスレッドから同じフィールドにアクセスする まとめ 参考資料 はじめに 前回のパート1では、コンソールアプリケーションのサンプルを作成しながら、.NET Frameworkにおけるスレッドの実行や同期の方法な

    .NETマルチスレッドプログラミング 2:非同期デリゲートとスレッドプール
  • Invokeとdelegate

    C#のプログラムを作ってて 忘れるといけないのでまとめ 間違ってたり,補足があったらコメントしていただけると助かります. あるメソッドAから別のあるメソッドBを呼び出そうとすると エラーが出る場合がある 例: private void serialPort1_DataReceived(略) { textBox1.text = "hoge"; } みたいな感じにすると止まる. やろうとしてたのはシリアルポートでなにかを受信したら "hoge"をテキストボックスに表示するというアプリケーションの作成 やれない理由は,メソッドAが動いてるスレッド中にメソッドBを無理やり動かそうとするため Windowsフォーム上でフォームを作成した場合,そのフォーム自身以外からのアクセスは動作が保障されていないため まぁ,CheckForIllegalCrossThreadCalls プロパティの値を fals

    Mikatsuki
    Mikatsuki 2015/05/31
    他のスレッドになんたらかんたら。Invokeとdelegateを使うのがセオリーらしい。
  • C++ 開発者が陥りやすい OpenMP* の 32 の罠 | iSUS

    この記事は、インテル® ソフトウェア・ネットワークに掲載されている「32 OpenMP traps for C++ developers」 (http://software.intel.com/en-us/articles/32-openmp-traps-for-c-developers/) の日語参考訳です。 はじめに マルチコアシステムが急速な広がりをみせており、並列プログラミングへの早急な対応が求められています。しかしながら、経験豊富な多くの開発者にとってもこれは新しい分野です。既存のコンパイラーとコード・アナライザーでも、並列コードの開発中に一部の問題を発見することはできますが、多くの問題は検出できません。この記事では、OpenMP* を使用する並列プログラムが正しく動作しない原因となるさまざまな問題について説明します。 概要 並列プログラミングが登場したのはかなり以前のことです

    C++ 開発者が陥りやすい OpenMP* の 32 の罠 | iSUS
  • OpenMP - Wikipedia

    OpenMP(オープンエムピー)は、並列計算機環境において共有メモリ・マルチスレッド型の並列アプリケーションソフトウェア開発をサポートするために標準化されたAPIである[2]。「OpenMP」は「open multiprocessing」の略である[2]。 同様に並列コンピューティングに利用されるMPIでは、メッセージの交換をプログラム中に明示的に記述しなければならないが、OpenMPではディレクティブ(指令)を挿入することによって並列化を行う。OpenMPが使用できない環境では、このディレクティブは無視されるため、並列環境と非並列環境でほぼ同一のソースコードを使用できるという利点がある。また、プラットフォーム固有のスレッドAPIを使わず、コンパイラによって暗黙的に生成されたスレッド[注釈 1]を利用してタスクを振り分けることになるため、並列プログラムを簡潔に記述できるだけでなく、複数の環

  • Delegate.BeginInvokeに重い処理はさせるな - 匣の向こう側 - あまりに.NETな

    Delegateを使って手軽に非同期処理を行うことが出来ますが、これには落とし穴があります。 using System; using System.Threading; delegate void Rush(); class Program { static void TheWorld() { Console.WriteLine("\nザ・ワールド!! 時よ止まれ!\n"); while (true) Thread.Sleep(Int16.MaxValue); } static void Muda() { Console.Write("無駄"); while (true) Thread.Sleep(Int16.MaxValue); } static void Mudaa() { Console.WriteLine("無駄ァ!!!!"); Thread.Sleep(1000); Consol

    Delegate.BeginInvokeに重い処理はさせるな - 匣の向こう側 - あまりに.NETな
  • Walkthrough: Multithreading with the BackgroundWorker Component (C# and Visual Basic)

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

    Walkthrough: Multithreading with the BackgroundWorker Component (C# and Visual Basic)
  • WPF:DataGridやListViewなどに表示しているデータを別スレッドから変更するには?[C#、VB]

    WPFのDataGridコントロールやListViewコントロールなど(いずれもSystem.Windows.Controls名前空間)に表示させるデータは、データバインディングを使って結び付けている。それにより、データを変更すれば自動的に表示も変わるし、双方向バインディングにしておけばDataGridコントロール上でエンドユーザーの行った編集結果がデータに反映される。このようにとても便利な仕組みになっているのだが、別スレッドからデータを変更するときに問題がある。稿では、その問題と、.NET Framework 4.5の新機能を使って対処する方法を解説する。 なお、稿のプログラミングには、無償のVisual Studio Express 2012 for Windows Desktop(以降、VS 2012)を使用した。Visual Studio 2013でも手順は同じである。 事前準

    WPF:DataGridやListViewなどに表示しているデータを別スレッドから変更するには?[C#、VB]
  • スレッド間の排他制御(クリティカルセクション) | WINAPI入門~bituse~

    今回はスレッド間の排他制御について説明します。 排他制御とはあるデータに複数のスレッドからアクセスがあった場合、 同時に値が書き込み読み込みをされてしまうと、データに問題が発生する可能性があるため、 一方のスレッドが書き込み読み込み中の間は、他のスレッドを待機状態にさせて利用できないようにする仕組みです。 例えばある領域のグローバル変数に対して、複数のスレッドから書き込みがあった時にどうなるでしょう? 想像するだけで怖いですよね。どうなるか分かったもんじゃありません。 そういった状況を回避するために、排他制御の仕組みを使います。 WINAPIではクリティカルセクションという仕組みを使って排他制御を実現できます。 まず、CRITICAL_SECTION構造体という構造体を使い、 クリティカルセクションオブジェクトを作成します。 このオブジェクトを所有しているスレッドだけが処理を実行できるとい

  • 【C#】 @IT:.NET TIPS Windowsフォームで別スレッドからコントロールを操作するには? - C# VB.NET VS.NET

    連載目次 Windowsフォームでスレッドを作成した場合、フォームやフォーム上のコントロールに対しては、そのスレッドからの操作(フォームやコントロールが持つメソッドの呼び出しやプロパティの読み書き)は動作が保証されない。稿ではそのような処理を<安全>に行うためのプログラミングについて解説する。 フォーカスの移動を行うサンプル・プログラム 例えば、Visual Studio .NET(以降、VS.NET)でWindowsアプリケーションのプロジェクトを新規作成し、次の画面のように、2つのテキストボックス(TextBox1とTextBox2)と1つのボタン(Button1)を配置したとする。

    【C#】 @IT:.NET TIPS Windowsフォームで別スレッドからコントロールを操作するには? - C# VB.NET VS.NET
    Mikatsuki
    Mikatsuki 2014/08/15
    他のコントロールに触れる方法かな?
  • 1