2010-12-18 11 views
0

マルチスレッドプログラミングを利用するために単一のループスレッド機能を使用することを考えていました。しかし、それは単純な理論なので、おそらく間違っているので、私はあなたのアイデアは何かと思います。シングルスレッド(追加スレッド)を使用したマルチスレッドプログラミング

たとえば、アプリケーションの周囲に散在している場所で1つの関数が複数回呼び出される場合があります。単純に並列プログラミングを行うのは難しいかもしれませんが、 "この関数が必要かどうか"をチェックするブール値でループする余分なスレッドを持つことができます。

アプリケーションを使用することは遠隔で可能ですか?

私はそれについてのブール値/ varを介しての "呼び出し"と必要な機能の実際の実行との間に "遅れ"があるために遅くなると思う。

編集:私は高速な関数を念頭に置いていましたが、呼び出される関数が非常に遅い(完了すると)実行可能であると思います。

さらに、私たちはスレッドの安全性と平易な並行性に対処する必要があります。だからこれはすべて間違っている可能性があります。

+0

プログラミング言語を指定してください。 – jgauffin

答えて

1

関数を実行するためにスレッドを起動することはできますが、呼び出し元はおそらく結果を待つことになります。スレッディングは、分離された形式で行うことができるプロセスには、定義上有用です。スレッド化するのに適した呼び出しだけではありません。

このようなプロセスを定義すると、複数のスレッドを一度に実行しても問題ありません。キューから関数を呼び出すだけの別スレッドを使用することはありません。 たとえば、レポートツールで使用することができます。データベースの負荷を最小限に抑えるため、一度に1つまたは少数のレポートのみを実行するように選択できます。レポートが完了すると、スレッドはキューから新しいレポートを取得できます。

このようなものを実装するために、私は接続プールとトレッドプールを構築(実際に構築しています)します。このようなものを構築したい場合は、mutex(原子/クリティカルセクション)とセマフォを検索することをお勧めします。

1

他のスレッドとは独立して実行できるタスクを処理するセカンダリスレッドにディスパッチすることが考えられます。必要なときに何らかの計算を行い、その結果をコールバック関数を介して返すスレッドを書くことが良い練習です。

モバイルアプリを開発するときにかなり頻繁に表示される例は、Webサーバーからイメージを取得する必要があることです。これは時間のかかる操作であり、失敗する可能性がありますので、別のスレッドで実行してください。私のアプリがイメージを取得したら、素晴らしい。それが失敗すれば、大きな問題ではありません。

ユーザーが自分のアプリを実行していて、アートワークを表示する必要があるとします。

  • まず、私はパラメータがルックアップするためのURLと呼び出す関数であるかもしれない
  • 私は(構造体または類似経由で渡された)いくつかのパラメータを持つ新しいスレッドを作成して、プレースホルダ画像または多分スピナー
  • を表示一度私はイメージを持っています。
  • 新しいスレッドが開始され、URLがルックアップされます。失敗した場合、終了します。
  • 画像を取得して正しいことを検証すると、渡されたコールバック関数が呼び出され、画像を必要なスレッドに渡します。
  • スレッド間でデータを配信する方法はたくさんありますが、並行性の問題(競合状態、デッドロック)とその発生の仕方に注意する必要があります。

最も単純なケースでは、両方のスレッドがミューテックスを共有します。このタイプのオブジェクトは、データリソースを保護してスレッド間の同期を容易にします。イメージを配信するスレッドは、ミューテックスをロックします。これにより、データリソース(おそらく画像キュー)に排他的にアクセスし、画像リソースを排除します。ミューテックスのロックを解除します。これで、イメージフェッチャースレッドを終了できるようになりました。

実行中に、画像を必要とするスレッドは、新しい画像があるかどうかを定期的に確認する必要があります。ミューテックスをロックし、キューをチェックし、イメージがあればそれをコピーして、ミューテックスをロック解除します。

これは、共有リソースでスレッドを使用する最も基本的なケースの1つです。より多くのことを学ぶにつれて、ミューテックスに加えて、シグナルスレッドや他の多くのタイプの操作に使用される他の構造を発見することができます。

一般的にスレッドと同期の詳細については、Andrew Tanenbaumのオペレーティングシステムブックをご覧ください。それは通常、ほとんどのコンピュータサイエンスの生徒のための読書を必要とし、あなたに莫大な量を教えます。見てくださいhere

関連する問題