JP2011501323A - ルーチン内のスレッドを切り替える方法 - Google Patents

ルーチン内のスレッドを切り替える方法 Download PDF

Info

Publication number
JP2011501323A
JP2011501323A JP2010531211A JP2010531211A JP2011501323A JP 2011501323 A JP2011501323 A JP 2011501323A JP 2010531211 A JP2010531211 A JP 2010531211A JP 2010531211 A JP2010531211 A JP 2010531211A JP 2011501323 A JP2011501323 A JP 2011501323A
Authority
JP
Japan
Prior art keywords
thread
coroutine
routine
return
subsequent
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2010531211A
Other languages
English (en)
Other versions
JP5315354B2 (ja
JP2011501323A5 (ja
Inventor
ツバリナ クリストフ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2011501323A publication Critical patent/JP2011501323A/ja
Publication of JP2011501323A5 publication Critical patent/JP2011501323A5/ja
Application granted granted Critical
Publication of JP5315354B2 publication Critical patent/JP5315354B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Abstract

ルーチン内のスレッドを切り替える技術および技法を開示する。コントローラールーチンは、コルーチンを実行する要求を元のルーチンから受信して、そして最初のスレッドのコルーチンを実行する。コントローラールーチンは、コルーチンがreturnステートメントに基づいて終了をすると、コルーチンからのレスポンスバックを受信する。リターンにより、コルーチンは、コルーチンを次回に実行するときにコルーチンを実行するべきである後続のスレッドを示す。コントローラールーチンは、次回、後続のスレッド上においてコルーチンを実行する。コルーチンは、returnステートメントに続くコードの行において実行をする。複数のreturnステートメントをコルーチンに含むことができて、スレッドを、上記と同一のアプローチを用いて、複数回、切り替えることができる。グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックを、ただ1つのルーチンにコミングルすることができる。

Description

本発明は、マルチスレッドに関し、より詳細には、ルーチン内のスレッドを切り替える方法に関する。
開発者は、1つまたは複数のソフトウェア開発プログラムを使用してソフトウェアアプリケーションを記述する。開発者は、ソフトウェアアプリケーションが要求される機能を実行するのに必要なソースコードを記述する。ユーザーインターフェースを有するソフトウェアアプリケーションは、エンドユーザーに対して仕上がったアプリケーションにおいてグラフィカルなメニューおよびオプションとの双方向のやり取りを可能にして、要求される結果を出す。一般に、ソースコードを、開発者が、ソフトウェアアプリケーション開発の間中、上記のユーザー入力を処理しそしてユーザー入力に応答してそれに適したワークを実行させるために、記述しなければならない。
例えば、仕上がった顧客サービスアプリケーションの場合、エンドユーザーは、与えられた顧客名に対して、顧客の全記録を検索する検索操作を選ぶことができることがある。そして、ソフトウェアアプリケーションは、その検索を処理して、データベースにアクセスして合致する記録を検出して、その結果をエンドユーザーに戻さなければならない。上記の検索をソフトウェアアプリケーションのユーザー・インターフェース・スレッド上において処理する場合、砂時計を処理の状態しだいに表示できるかまたは表示できない。例えば、ソフトウェアアプリケーションが完全にブロックされている場合、砂時計を表示できない。上記のブロックのシナリオの場合、画面に表示できるすべては、黒い矩形かまたはユーザー・インターフェース・スレッドがブロックされていることを意味する他の表示かである。ブロックされている期間中、ユーザーは、ユーザー・インターフェース・スレッドが検索の実行プログラムにすべて使用されるので、プログラムによりほかのどんなこともできない。
今日、技術が進歩したので、マルチスレッドアプリケーションおよびマルチプロセッサを使用できる。言い換えると、マルチスレッドの実行を、同時に開始でき、使用可能なときにはマルチプロセッサ上において開始できるときもある。例えば、1つのスレッドを、ユーザー入力を処理するのに使用できて、別のスレッドを、ワーカータスクを実行するのに使用できる。マルチスレッドアプリケーションを作成するために、開発者は、マルチスレッドを作成して管理する複雑なコードを記述するのに努力を必要とする。通常、ソースコードは、異なるスレッド間の引数を渡す機能を含む必要があり、多くの異なる位置にわたって非同期に実行できる。開発者は、別個のスレッドにより実行する必要があるワークに対して別個のルーチンを記述することが多い。複数のスレッドによる作業の複雑さのために、開発者は、複数のスレッドを不正確にまたは非効率に使用することがよくあり、または複数のスレッドを少しも使用さえせずにユーザーにめったに起こらないユーザー・インターフェース・ブロックにより罰金を科すことをまさに期待するかのようなことが普通に見られる。
ルーチン内のスレッドを切り替える種々の技術および技法を開示する。コントローラールーチンは、元のルーチンからコルーチンを実行する要求を受信して、最初のスレッド上においてコルーチンを実行する。コントローラールーチンは、コルーチンがreturnステートメントに基づいて存在するときにコルーチンからのレスポンスバックを受信する。コルーチンは、コルーチンが実行される次の時間に実行するべきである次のスレッドを示す。コントローラールーチンは、あらかじめ示された次のスレッドについての次の時間にコルーチンを実行する。複数のreturnステートメントをコルーチンに含むことができて、これらのステップを複数回繰り返してスレッドを切り替えることができる。
一実施例において、グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックの実行を、ただ1つのコルーチンにコミングル(co-mingle)することができる。コードの実行は、ユーザー入力を受信する第1のスレッド上に実行される最初のロジックを含む、コルーチンに含まれる最初のロジックに対して始まる。次に、ユーザー入力を受信する。コルーチンは、第2のスレッドが第1のスレッドと異なるスレッドである状態において、第2のスレッドへの切り替えを終えて部分的に戻る。コードの実行は、第2のスレッド上のコルーチンを再開して、ユーザー入力に応答してワークを実行する。
この発明の概要は、発明を実施するための形態において以下にさらに説明する概念の選択を簡略化された形において導入するために与えられた。この発明の概要は、主張される主題の重要な構成または本質的な構成を識別することを意図されず、主張される主題の範囲を限定する目的として用いられることも意図されていない。
本発明の一実施形態に係るスレッド・スイッチング・システムの概観の図である。 本発明の一実施形態に係るコンピューターシステムの概観の図である。 本発明の一実施形態に係るスレッド・スイッチング・コントローラー・アプリケーションの概観の図である。 本発明の一実施形態に係る異なるスレッド上のコルーチンの実行を管理するコントローラールーチンを使用することに含まれたステージを例示する処理のフローチャートである。 本発明の一実施形態に係るルーチンを終えてスレッドを部分的に切り替えることに含まれたステージを例示する処理のフローチャートである。 本発明の一実施形態に係るグラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックに、ただ1つのルーチンへコミングルすることができるようにすることに含まれたステージを例示する処理のフローチャートである。 本発明の一実施形態に係るコントローラールーチンをどのように開始するかの例を示すユーザーインターフェースの形に結び付けられたOnClickイベント用の例示的なソースコードを実例により説明する図である。 本発明の一実施形態に係る複数のスレッド上のコルーチンの実行を管理するコントローラールーチン用の例示的なソースコードを実例により説明する図である。 本発明の一実施形態に係るグラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックをただ1つのコルーチンにコミングルするコルーチン用の例示的なソースコードを実例により説明する図である。
本明細書において、技術および技法を、ただ1つのルーチン内のスレッド間の切り替えを可能にする技法としての一般的な文脈において説明できるが、技術および技法は、さらにこれらに加えて他の目的にかなう。一実施例において、本明細書において説明する技術および技法を、例えば本願発明の特許出願人の製品などのソフトウェア開発プログラム内の機能として、ソフトウェアアプリケーション用のソースコードを記述するのに使用されるあらゆる型のプログラムもしくはサービスから、またはマルチスレッドのソフトウェアアプリケーションを生成するかまたは管理するかに用いられる他のあらゆる型のプログラムもしくはサービスから実装できる。
一実施例において、コルーチンを、本明細書において説明する技術および技法のうちのいくつかまたはすべてにより用いて、シーケンシャルのようにそして通常の言語構文により引数を渡すだけでなく、ただ1つのルーチンに含まれるロジックを実行する複数のスレッド間を切り替えることを考慮するコードを、記述できるようにすることができる。言い換えると、本明細書において説明する技術および技法により、同一ルーチン内の異なるスレッド上に実行されるロジックの処理をコミングルするメカニズムを与える。本明細書において用いられる用語「コルーチン」は、関数、手順、またはコルーチン内にコロケートされる一組のコードステートメントを含みつつ、コントロールがコルーチンに入るときまたはコルーチンから出るときと無関係であるコルーチンの個別のアクティブ化レコードの有効期間によって、中断してそして後の時間において再開できる複数のエントリポイントを許す他のルーチンを含むことを意味する。
図1は、本発明の一実施形態に係るスレッド・スイッチング・システム10の概観の図である。一実施例において、スレッド・スイッチング・システム10は、元のルーチン12、コントローラールーチン14およびコルーチン16を含む。本明細書において用いられる用語「ルーチン」は、関数、手順、ソースコードを構成単位にまとめる他のあらゆる方法を含むプログラムコンポーネントを含むことを意味する。元のルーチン12は、例えばコルーチン16など、与えられたコルーチンに含まれる機能を実行する必要があるあらゆるルーチンであるとすることができる。一実施例において、コルーチンの呼び出しをするために、元のルーチン12は、コントローラールーチン14を経由する。コントローラールーチン14は、ルーチンがリターンされるとコルーチンにより示されたスレッド上のコルーチン16を開始するたびごとに、複数回、コルーチン16の呼び出しを繰り返す。本明細書において用いられる用語「returnステートメント」は、コルーチンに、コルーチンの終了に到達する前にリターンをさせるステートメントまたは他のメカニズムを含むことを意味する。言い換えると、コルーチン16がコードの中のより多くのあらゆる行を実行する前にスレッドを切り替える必要があるとき、returnステートメントを使用することにより、異なるスレッドを使用して後に続くコードの中の行を処理できるようにルーチンから一時的にリターンをする。コルーチンが、リターンをすることにより後続のスレッドを示すことができる種々の方法がある。一実施例において、returnステートメントは、次に使用されるべき別のスレッド用の、後続のスレッドの識別子を含むリターンパラメーターを含むことができる。後続のスレッドを示す他の種々の方法を、例えば、リターンをする前に後続のスレッドを設定するメソッドの呼び出しをするコルーチンによって、後続のスレッドの識別子によりオブジェクトのプロパティまたは値を設定することによって、後続のスレッドの識別子をデータベースに記憶させることによってなど、さらに使用できる。
そして、コルーチン16は、returnステートメントの次に続くコードの(1行または複数行あとの)行において、または別の適した位置から(別のスレッド上において)再開される。ステージを、コルーチン16の終了に到達するまで、またはコントローラールーチン14に、コルーチン16の実行による繰り返しとスレッドの切り替えとを停止させる別のイベントが発生するまで、繰り返すことができる。一実施例において、コルーチン16がコントローラールーチン14により再開されるたびごとに、もっとも近くのリターンにおいてコルーチンから示されたもっとも近くの後続のスレッドを使用することにより、使用するスレッドを決定できる。
別の一実施例において、元のルーチン12およびコントローラールーチン14の機能を組み合わせて同一のルーチンにすることができることを補足すべきである。いくつかの実施例において、本明細書にて用いられる用語「ルーチン」は、コルーチンをさらに含むことができる。例えば、元のルーチン12およびコントローラールーチン14をルーチンとしてともに説明したが、いくつかの実施例において、元のルーチン12およびコントローラールーチン14のどちらかまたは両方を1つまたは複数のコルーチンとして実装できるだろう。図1の説明において紹介した上記の技法を、図3〜6においてより詳細に説明しそして図7〜9においてソースコードの例により説明するものである。
さて、図2を参照して、スレッド・スイッチング・システムの1つまたは複数のパーツを実装するのに使用され、例えばコンピューティングデバイス100などのコンピューティングデバイスを含む例示的なコンピューターシステムを説明する。コンピューターシステムの最も基本的な構成において、通常、コンピューティングデバイス100は、少なくとも1つの処理ユニット102およびメモリ104を含む。コンピューティングデバイスの正確な構成および型しだいにより、メモリ104は、揮発性(例えばRAMなど)、不揮発性(例えば、ROM、フラッシュメモリなど)、またはこれら2つの組み合わせであるとすることができる。上記の最も基本的な構成を、図2において破線106により例示する。
加えて、コンピューティングデバイス100は、追加の機能/ファンクションをさらに有することができる。例えば、コンピューティングデバイス100は、制限されないが、磁気もしくは光学のディスクまたはテープを含む(固定および/または取外し可能の)追加の記憶装置をさらに含むことができる。上記の追加のストレージを、図2において取外し可能な記憶装置108および固定の記憶装置110により例示する。コンピューター記憶媒体は、例えばコンピューター読み取り可能な命令、データ構造、プログラムモジュールもしくは他のデータなどの情報を記憶するためのあらゆる方法または技術において実装される、揮発性および不揮発性、取外し可能および固定の媒体を含む。メモリ104、取外し可能な記憶装置108および固定の記憶装置110は、すべてコンピューター記憶媒体の例である。コンピューター記憶媒体は、制限されないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、DVD(digital versatile disk)もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または望みの情報を格納するのに使用できるとともにコンピューティングデバイス100がアクセスできる他のあらゆる媒体を含む。上記のあらゆるコンピューター記憶媒体は、コンピューティングデバイス100の一部であるとすることができる。
コンピューティングデバイス100は、コンピューティングデバイス100に他のコンピューター/アプリケーション115と通信することを可能にする1つまたは複数の通信接続114を含む。コンピューティングデバイス100は、例えば、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなど、(複数の)入力デバイスをさらに含むことができる。例えば、ディスプレイ、スピーカー、プリンターなど、(複数の)出力デバイスを、さらに含むことができる。上記のデバイスは、当技術分野においてよく知られており、上記のデバイスを、詳細に説明する必要はない。一実施例において、コンピューティングデバイス100は、スレッド・スイッチング・コントローラー・アプリケーション200を含む。スレッド・スイッチング・コントローラー・アプリケーション200を、図3においてさらに詳細に説明するものである。
図3を参照して、図2の参照を続けつつ、コンピューティングデバイス100上において動作するスレッド・スイッチング・コントローラー・アプリケーション200を説明する。スレッド・スイッチング・コントローラー・アプリケーション200は、コンピューティングデバイス100上に備わっているアプリケーションプログラムの1つである。しかしながら、スレッド・スイッチング・コントローラー・アプリケーション200を、1つまたは複数のコンピューター上の、および/または図2に示されたのと異なるバリエーションにおけるコンピューター実行可能な命令として、代わりにまたは加えて組み立てることができる。代わりにまたは加えて、スレッド・スイッチング・コントローラー・アプリケーション200の1つまたは複数のパーツは、システムメモリ104の一部であると、他のコンピューターおよび/またはアプリケーション115上にあると、またはコンピューターソフトウェアの当業者が気づくだろう他の上記のバリエーションであるとすることができる。
スレッド・スイッチング・コントローラー・アプリケーション200は、プログラムロジック204を含み、本明細書において説明する技術のいくつかまたはすべてを確実に実行する。プログラムロジック204は、コルーチンを実行する要求を元のルーチンから受信する(図4に関して下に説明するような)ロジック206、最初のスレッド上のコルーチンを実行する(図4に関して下に説明するような)ロジック208、コルーチンがリターンをするとコルーチンからのレスポンスバックを受信する(図4に関して下に説明するような)ロジック210、コルーチンがリターンをしたときに示された後続のスレッド上のコルーチンを実行する(図4に関して下に説明するような)ロジック212、グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックの実行を、ただ1つのルーチンにコミングル(co-mingle)することができる(図6に関して下に説明するような)ロジック214、およびスレッド・スイッチング・コントローラー・アプリケーション200を動作させる他のロジック220を含む。
図4〜6を参照して、図1〜3の参照を続けつつ、(図1の)スレッド・スイッチング・システム10および/または(図3の)スレッド・スイッチング・コントローラー・アプリケーション200についての1つまたは複数の実施例を実装するステージを、さらに詳細に説明する。いくつかの実施例において、図4〜6の処理を、コンピューティングデバイス100の動作ロジックにおいて少なくとも部分的に実装する。
図4は、異なるスレッド上のコルーチンの実行を管理するコントローラールーチンを使用することに含まれたステージの一実施例を例示する処理のフローチャートである。一般に、図4は、returnステートメントに基づいてコルーチンがリターンをするときに指定されたスレッド上のコルーチンの呼び出しをするたびごとに、複数回、コントローラールーチンにコルーチンの呼び出しをさせることに含まれる例示的な処理を示す。
コルーチンを実行する要求を元のルーチンからの受信する(ステージ242)と、コントローラールーチンは、最初のスレッド上のコルーチンを実行する(ステージ244)。一実施例において、望みのスレッドへの切り替えを開始する、コルーチンにおけるコードの行にいく前に、最初のスレッドは、単に、スレッドが別に指定されないときにソフトウェアアプリケーションにより使用されるデフォルトのスレッドであるだろう。次に、コルーチンが一定のロジックを実行して、コントローラールーチンがreturnステートメントに基づいてコルーチンからのレスポンスバックを受信する(ステージ246)。終了により、コルーチンは、コントローラールーチンがコルーチンに呼び出しをする次回にどのスレッドがコルーチンの呼び出しをするべきかを指定する後続のスレッドの識別子を示した。一実施例において、returnステートメントによるコルーチンから受信されたレスポンスバックは、後続のスレッドの識別子付きのパラメーターを含む。別の実施例において、コントローラールーチンは、オブジェクトに、データベースに、またはコルーチンがリターンをされたときに後続のスレッドの識別子に割り当てられた他の変数の値にアクセスする。
そして、コントローラールーチンは、コルーチンがリターンをされたときに示された(後続のスレッドの識別子に示された)スレッド上において次回にコルーチンを実行する(ステージ248)。コルーチンがコルーチンの終了に到達する前に(別のreturnステートメントのために)再度リターンをする場合(判断ポイント250)、コントローラールーチンは、コルーチンから別のレスポンスバックを受信してそしてコルーチンが呼び出しをされる次回にコルーチンを開始する次の後続のスレッドの指示を有するだろう(ステージ246)。そして、コントローラールーチンは、次の後続のスレッド上のコルーチンを再び実行するだろう(ステージ248)。ひとたびコルーチンの終了に到達する(判断ポイント250)と、コントローラールーチンは、コルーチンの呼び出しを停止する(ステージ252)。
図5は、ルーチンを終えてスレッドを部分的に切り替えることに含まれたステージの一実施例を例示する処理のフローチャートである。ルーチンを、1つのスレッド上において開始する(ステージ272)。一実施例において、ルーチンは、コルーチンである。別の実施例において、ルーチンは、複数回、呼び出しができつつ、先の実行が停止したときにコードのポイントにおいて開始される実行を使用できるあらゆる型のルーチンである。ルーチンのコードの1つまたは複数の行の実行後に、ルーチンは、returnステートメントにいき、returnステートメントにいくことによって、ルーチンに、ルーチンの中のすべてのコードを部分的にのみ終えてポイントのリターンをさせる(ステージ274)。リターンをすることによって、ルーチンは、後続のスレッドの識別子を示す(ステージ274)。例えば、ルーチン自体のreturnステートメントのリターンパラメーターにおいて、値を設定するオブジェクトもしくは型のプロパティかフィールドかを設定することによって、値を設定するメソッドの呼び出しをすることによって、後続のスレッドの識別子をデータベースに書込むことによって、後続のスレッドの識別子をコントローラールーチンに伝達する他のあらゆる手段によってなど、ルーチンが後続のスレッドの識別子を示すことができる種々の方法がある。次に、ルーチンの実行を、後続のスレッドの識別子において指定されたスレッド上において再開する(ステージ276)。コードの実行を、後続のスレッド上の今回に、リターン前の前回の続きをする(ステージ278)。
図6は、グラフィカル・ユーザー・インターフェース・スレッド・ロジックおよびワーカー・スレッド・ロジックに、ただ1つのルーチンへコミングルすることができるようにすることに含まれたステージの一実施例を説明する処理のフローチャートである。コルーチンを、ユーザー入力を受信するために第1のスレッド上において開始する(ステージ292)。次に、ユーザー入力を受信する(ステージ294)。コルーチンは、第2のスレッドが第1のスレッドと異なった状態において、第2のスレッドに切り替えるために部分的に終えてリターンをする(ステージ296)。一実施例において、コルーチンは、returnステートメントにいくために、リターンをする。コードの実行を、ユーザー入力に応答してワークを行うために第2のスレッド上のコルーチンにおいて再開する(ステージ298)。一実施例において、第1のスレッドがグラフィカル・ユーザー・インターフェース・スレッドでありつつ、第2のスレッドがワーカー・スレッドである。グラフィカル・ユーザー・インターフェース・スレッドおよび/もしくはワーカー・スレッドの代わりにまたはグラフィカル・ユーザー・インターフェース・スレッドおよび/もしくはワーカー・スレッドに加えて、種々の組み合わせが可能である。図9は、グラフィカル・ユーザー・インターフェース・スレッド・ロジックおよびワーカー・スレッド・ロジックをただ1つのルーチンへコミングルすることについての例示的なソースコードを示す。
さて、図7〜9を参照して、例示的なソースコードを説明して、図4〜6のステージをさらに詳細に説明するものである。図7から始めると、ユーザーインターフェースの形に結びつくOnClickイベント312用の例示的なソースコード310を示す。OnClickイベント312(図1の元のルーチン12)は、エンドユーザーがフォーム上のBetterButtunのボタンをクリックすると始まる。次に、OnClickイベント312は、コントローラールーチン(図1のコントローラールーチン14)の呼び出しをして、それは示した例における実行メソッド314である。一実施例において、コントローラールーチンにより実行される必要があるコルーチン名を、パラメーターとしてコルーチンルーチンへ元のルーチンから渡す。次に、コントローラールーチンは、図8に示すような、適したスレッド上のコルーチンの呼び出しを、複数回、確実にする。コルーチンへの呼び出しがループ324内にさらに含まれて、それはコルーチンの呼び出しを、複数回、確実にする。コルーチンの呼び出しをするたびごとに、コントローラールーチンは、コルーチンがリターンをしたときに先に指定したスレッド上のコルーチンを開始する。
図9に示すように、コルーチンは、ただ1つのコルーチンにミックスされる異なる型のスレッド上に実行するよう指定されたコードを含むことができる。図9の例示的なソースコード330において、グラフィカル・ユーザー・インターフェース・ロジック(336、344)およびワーカー・スレッド・ロジック(340)がただ1つのルーチンにともにコミングルされて、それは図9の例におけるbetterButtun1_Clickedルーチン332である。スレッド間を切り替えるために、returnステートメント(334、338、342)を使用する。上記の例において、GUIスレッドおよびワーカー・スレッドを、ワークの別個の部分を実行するために使用する。さらにその上、上記の例において、returnステートメントは、(C#プログラミング言語の)yieldステートメントである。各returnステートメント(334、338、342)は、コルーチンを、一時的にリターンをして、そしてreturnステートメントにパラメーター(例えば、GUIスレッドに対して「ThreadRequest.UI」、またはワーカー・スレッドに対して「ThreadRequest.Worker」)として指定されたスレッドにおいて再開するべきであることを信号送信する。図8に示したコントローラールーチンがコルーチンからリターンレスポンスを受信すると、次に、コルーチンの実行を、指定されたスレッド上においてのみ、コントローラールーチンによって再び開始する。
主題を、構造的機能および/または方法論的動作に特定の言語において説明したが、添付の特許請求の範囲において定義される主題は、上に説明した特定の機能または動作に必ずしも制限されない。むしろ、上に説明した特定の機能または動作を、クレームを実装する形の例として開示する。本明細書において説明したようにおよび/または添付の特許請求の範囲よって実施例の精神の範囲内にあるすべての等価、変更および修正を、保護することを望む。
例えば、当コンピューターソフトウェア分野の事業者は、本明細書において説明された実施例を、実施例において表現されたよりもより少ないもしくはより多くのオプションまたは機能を含む1つまたは複数のコンピューターに、異なって構成できることを承知するであろう。

Claims (20)

  1. コンピューターに、
    コルーチンを実行する要求を元のルーチンから受信する手順(206)と、
    最初のスレッド上のコルーチンを実行する手順(208)と、
    コルーチンがreturnステートメントに基づいてリターンをするとコルーチンからのレスポンスバックを受信する手順(210)と、
    リターンによりコルーチンが示した後続のスレッド上のコルーチンを次回に実行する手順(212)と
    を実行させるコンピューター実行可能な命令を有するコンピューター読み取り可能な媒体。
  2. もっとも近くのリターンにおいてコルーチンにより示されたもっとも近くの後続のスレッド上のコルーチンを実行するたびごとに、コルーチンの終了に到達するまで複数回コルーチンを実行する手順(250)
    を実行させるコンピューター実行可能な命令をさらに有することを特徴とする請求項1に記載のコンピューター読み取り可能な媒体。
  3. 前記後続のスレッドは、パラメーターとしてreturnステートメントに含まれる(246)ことを特徴とする請求項1に記載のコンピューター読み取り可能な媒体。
  4. 前記後続のスレッドは、ワーカー・スレッド・ロジックを処理するために使用される(296)ことを特徴とする請求項1に記載のコンピューター読み取り可能な媒体。
  5. ルーチンを部分的に終えてスレッドを切り替える方法であって、
    第一のスレッド上のルーチンの実行を開始するステップ(272)と、
    第一のreturnステートメントにより前記ルーチンを部分的に終えてポイントでの前記ルーチンの終了をさせるステップ(274)であって、前記第一のreturnステートメントが後続のスレッドの識別子を有する、終了をさせるステップと、
    前記後続のスレッドの識別子において指定された後続のスレッド上におけるルーチンのコードの実行を再開するステップ(276)と、
    前記第一のreturnステートメントに続くコードの行での前記ルーチンにおけるコードの実行の続きをするステップ(278)と
    を備えた方法。
  6. 前記第一のスレッドと前記後続のスレッドとのうちの少なくとも1つは、グラフィカル・ユーザー・インターフェース・ロジックを処理するために使用されるスレッドである(292)ことを特徴とする請求項5に記載の方法。
  7. 前記第一のスレッドと前記後続のスレッドとのうちの少なくとも1つは、ワーカー・ロジックを処理するために使用されるワーカー・スレッドである(298)ことを特徴とする請求項5に記載の方法。
  8. 前記ルーチンは、コルーチンである(272)ことを特徴とする請求項5に記載の方法。
  9. 前記第一のスレッドは、第二のスレッドと異なる型の動作を処理するのに使用される(298)ことを特徴とする請求項8に記載の方法。
  10. 前記後続のスレッドの識別子は、パラメーターとして前記第一のreturnステートメントに含まれる(274)ことを特徴とする請求項5に記載の方法。
  11. 前記ルーチンの終了に到達するまで複数回、前記終了をさせるステップと、前記再開するステップと、続きをするステップとを繰り返すステップ(250)
    をさらに備えたことを特徴とする請求項5に記載の方法。
  12. 前記ルーチンに含まれるコードの第一の行は、前記第一のreturnステートメントである(344)ことを特徴とする請求項5に記載の方法。
  13. 前記第一のreturnステートメントは、前記ルーチンのコードをさらに処理する前に第一の所望の実行スレッドを前記後続のスレッドの識別子に指定できるように前記コードの第一の行に置かれる(344)ことを特徴とする請求項12に記載の方法。
  14. グラフィカル・ユーザー・インターフェース・ロジックおよびワーカー・スレッド・ロジックを、ただ1つのルーチンにコミングルする方法であって、
    コルーチンに含まれる最初のロジックのコードの実行を開始するステップ(292)であって、前記最初のロジックがユーザー入力を受信するために第一のスレッド上に実行される、開始するステップと、
    前記ユーザー入力を受信するステップ(294)と、
    第二のスレッドに切り替えるために部分的に終えて前記コルーチンの終了をさせるステップ(296)であって、前記第二のスレッドが前記第一のスレッドと異なるスレッドである、終了をさせるステップと、
    前記ユーザー入力に応答してワーカーを実行するために前記第二のスレッド上のコルーチンにおけるコードの実行を再開するステップ(298)と
    を備えた方法。
  15. 前記終了をさせるステップは、returnステートメントに到達すると実行される(296)ことを特徴とする請求項14に記載の方法。
  16. 前記returnステートメントは、実行を再開するべき次のスレッドを指定するスレッドの識別子をパラメーターとして含む(274)ことを特徴とする請求項15に記載の方法。
  17. 複数のreturnステートメントが、スレッドの切り替えを行うべきときに示すルーチンに含まれる(16)ことを特徴とする請求項16に記載の方法。
  18. 前記コルーチンは、適したスレッド上のコルーチンの呼び出しを確実にするコントローラールーチンにより複数回呼び出しをされることを特徴とする請求項14に記載の方法。
  19. 前記コントローラールーチンは、元のルーチンにより呼び出しをされる(12)ことを特徴とする請求項18に記載の方法。
  20. 前記元のルーチンは、前記コルーチンの呼び出しをする要求を含む(12)ことを特徴とする請求項19に記載の方法。
JP2010531211A 2007-10-25 2008-10-22 ルーチン内のスレッドを切り替える方法 Active JP5315354B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/977,593 2007-10-25
US11/977,593 US8589925B2 (en) 2007-10-25 2007-10-25 Techniques for switching threads within routines
PCT/US2008/080825 WO2009055494A2 (en) 2007-10-25 2008-10-22 Techniques for switching threads within routines

Publications (3)

Publication Number Publication Date
JP2011501323A true JP2011501323A (ja) 2011-01-06
JP2011501323A5 JP2011501323A5 (ja) 2011-12-08
JP5315354B2 JP5315354B2 (ja) 2013-10-16

Family

ID=40580367

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010531211A Active JP5315354B2 (ja) 2007-10-25 2008-10-22 ルーチン内のスレッドを切り替える方法

Country Status (5)

Country Link
US (3) US8589925B2 (ja)
EP (1) EP2217998B1 (ja)
JP (1) JP5315354B2 (ja)
TW (2) TWI446262B (ja)
WO (1) WO2009055494A2 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589925B2 (en) 2007-10-25 2013-11-19 Microsoft Corporation Techniques for switching threads within routines
US8732211B2 (en) 2011-01-28 2014-05-20 International Business Machines Corporation Method, computer system, and physical computer storage medium for organizing data into data structures
EP3113017B1 (en) * 2013-04-23 2018-04-18 AB Initio Technology LLC Controlling tasks performed by a computing system
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
US9760406B2 (en) 2014-09-02 2017-09-12 Ab Initio Technology Llc Controlling data processing tasks
AU2015312012B2 (en) 2014-09-02 2020-02-27 Ab Initio Technology Llc Compiling graph-based program specifications
US9933918B2 (en) 2014-09-02 2018-04-03 Ab Initio Technology Llc Specifying control and data connections in graph-based programs
CN106605209B (zh) * 2014-09-02 2020-05-12 起元科技有限公司 控制数据处理任务
KR102375349B1 (ko) 2014-09-02 2022-03-16 아브 이니티오 테크놀로지 엘엘시 연관된 태스크들을 제어하기 위한 그래프 기반 프로그램 명세의 구성요소들의 실행 상태 관리
US9552223B2 (en) * 2014-09-30 2017-01-24 International Business Machines Corporation Post-return asynchronous code execution
CN105447138A (zh) * 2015-11-20 2016-03-30 北京京东尚科信息技术有限公司 用于服务器的方法及系统
US10761714B2 (en) * 2015-11-23 2020-09-01 Google Llc Recognizing gestures and updating display by coordinator
CN108089919B (zh) * 2017-12-21 2021-01-15 北京云杉世纪网络科技有限公司 一种并发处理api请求的方法及系统
US11789741B2 (en) * 2018-03-08 2023-10-17 Sap Se Determining an optimum quantity of interleaved instruction streams of defined coroutines
CN109257411B (zh) * 2018-07-31 2021-12-24 平安科技(深圳)有限公司 一种业务处理方法、调用管理系统和计算机设备
CN110247984B (zh) * 2019-06-27 2022-02-22 腾讯科技(深圳)有限公司 业务处理方法、装置及存储介质
CN113608843B (zh) * 2021-07-08 2023-08-25 广东开放大学(广东理工职业学院) 协程实现方法和系统
CN114584500B (zh) * 2022-02-25 2024-03-22 网易(杭州)网络有限公司 异步通信的测试方法、装置及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03172938A (ja) * 1989-12-01 1991-07-26 Fujitsu Ltd コルーチン呼び出し制御方式
JPH09198265A (ja) * 1996-01-04 1997-07-31 Sun Microsyst Inc マルチスレッド型プログラミング環境における共用資源への並行同時アクセスを自動的に管理する方法及びそのための装置
WO2005114405A2 (en) * 2004-05-20 2005-12-01 Sap Aktiengesellschaft Sharing objects in runtime systems
US20070118836A1 (en) * 2005-11-18 2007-05-24 Mensing Joerg W Cooperative scheduling using coroutines and threads

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0426323B1 (en) * 1989-10-31 1996-01-10 Hewlett-Packard Company Portable, resource sharing file server using co-routines
JPH03173938A (ja) 1989-11-30 1991-07-29 Pioneer Electron Corp トラッキングサーボ装置
US5261097A (en) * 1991-03-11 1993-11-09 Digital Equipment Corporation Computer system and method for executing command scripts using multiple synchronized threads
US6480818B1 (en) * 1998-11-13 2002-11-12 Cray Inc. Debugging techniques in a multithreaded environment
US6449614B1 (en) 1999-03-25 2002-09-10 International Business Machines Corporation Interface system and method for asynchronously updating a share resource with locking facility
US7043725B1 (en) * 1999-07-09 2006-05-09 Hewlett-Packard Development Company, L.P. Two tier arrangement for threads support in a virtual machine
AU7606301A (en) 2000-09-29 2002-04-11 International Business Machines Corporation Context based view design to support client side multi-threading
US6954933B2 (en) * 2000-10-30 2005-10-11 Microsoft Corporation Method and apparatus for providing and integrating high-performance message queues in a user interface environment
US6904597B2 (en) 2001-03-30 2005-06-07 Intel Corporation Inter-thread communications between different components using double buffer
US7007244B2 (en) 2001-04-20 2006-02-28 Microsoft Corporation Method and system for displaying categorized information on a user interface
US7159215B2 (en) * 2001-06-27 2007-01-02 Sun Microsystems, Inc. Termination detection for shared-memory parallel programs
US7103887B2 (en) * 2001-06-27 2006-09-05 Sun Microsystems, Inc. Load-balancing queues employing LIFO/FIFO work stealing
US20030041139A1 (en) 2001-08-14 2003-02-27 Smartpipes, Incorporated Event management for a remote network policy management system
US7086049B2 (en) * 2002-02-26 2006-08-01 International Business Machines Corporation Background code update for embedded systems
JP4520788B2 (ja) * 2004-07-29 2010-08-11 富士通株式会社 マルチスレッドプロセッサ
US20060048106A1 (en) * 2004-08-27 2006-03-02 International Business Machines Corporation Link-time profile-based method for reducing run-time image of executables
US8568225B2 (en) 2004-09-16 2013-10-29 Bally Gaming, Inc. User interface system and method for creating and verifying signed content
US7685574B2 (en) * 2004-09-29 2010-03-23 Microsoft Corporation Constrained execution regions
US7603673B2 (en) * 2004-10-28 2009-10-13 Intel Corporation Method and system for reducing context switch times
US7610579B2 (en) * 2004-12-10 2009-10-27 Microsoft Corporation Critical finalizers
US7467272B2 (en) * 2004-12-16 2008-12-16 International Business Machines Corporation Write protection of subroutine return addresses
US20080168247A1 (en) * 2007-01-05 2008-07-10 Seagate Technology Llc Method and apparatus for controlling access to a data storage device
US8589925B2 (en) 2007-10-25 2013-11-19 Microsoft Corporation Techniques for switching threads within routines

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03172938A (ja) * 1989-12-01 1991-07-26 Fujitsu Ltd コルーチン呼び出し制御方式
JPH09198265A (ja) * 1996-01-04 1997-07-31 Sun Microsyst Inc マルチスレッド型プログラミング環境における共用資源への並行同時アクセスを自動的に管理する方法及びそのための装置
WO2005114405A2 (en) * 2004-05-20 2005-12-01 Sap Aktiengesellschaft Sharing objects in runtime systems
JP2007538323A (ja) * 2004-05-20 2007-12-27 エスアーペー アーゲー ランタイムシステムにおけるオブジェクトを共有するためのプログラム、方法、装置
US20070118836A1 (en) * 2005-11-18 2007-05-24 Mensing Joerg W Cooperative scheduling using coroutines and threads

Also Published As

Publication number Publication date
WO2009055494A3 (en) 2009-07-02
TW200921509A (en) 2009-05-16
JP5315354B2 (ja) 2013-10-16
US20140047446A1 (en) 2014-02-13
TWI515655B (zh) 2016-01-01
EP2217998B1 (en) 2017-02-22
TW201426546A (zh) 2014-07-01
US20190138347A1 (en) 2019-05-09
TWI446262B (zh) 2014-07-21
US10698726B2 (en) 2020-06-30
WO2009055494A2 (en) 2009-04-30
EP2217998A2 (en) 2010-08-18
EP2217998A4 (en) 2014-07-23
US20090113436A1 (en) 2009-04-30
US10007551B2 (en) 2018-06-26
US8589925B2 (en) 2013-11-19

Similar Documents

Publication Publication Date Title
JP5315354B2 (ja) ルーチン内のスレッドを切り替える方法
US8327336B2 (en) Enhanced thread stepping
JP5328055B2 (ja) メモリトランザクションのグループ化
US8849753B2 (en) Automating asynchronous programming in single threaded systems
US20080120605A1 (en) Stepping and application state viewing between points
US8650551B2 (en) Transactional debugger for a transactional memory system and detecting conflicts
US7567257B2 (en) Partition-based undo of partitioned object graph
US8271768B2 (en) Concurrent handling of exceptions in received aggregate exception structure with supplied exception handlers and marking handled exceptions
CN104461876A (zh) 一种基于运行快照序列的并行程序重现调试方法
US20080320275A1 (en) Concurrent exception handling
MX2010012829A (es) Recobrar control de un recurso de procesamiento que ejecuta un contexto de ejecucion externa.
TW200905567A (en) Notifying user mode scheduler of blocking events
US8196123B2 (en) Object model for transactional memory

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111017

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111017

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130502

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130607

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130708

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5315354

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250