複数のプロセッサと、前記複数のプロセッサからアクセスされる共有リソースと、プロセッサから発行される前記共有リソースに対するロック命令、アンロック命令の受信に応じて、前記共有リソースの同期制御を行うセマフォ制御回路と、を備え、前記セマフォ制御回路は、あるロック命令にかかる前記共有リソースのロック時間をカウントし、前記共有リソースのロック中にロック命令を発行したプロセッサの命令送信順序を保持し、確定した前記ロック時間と、前記命令送信順序と、に基づいて前記共有リソースに対するロックに失敗した各プロセッサのロック命令再発行までの待ち時間を算出して通知する、マルチプロセッサシステム。前記セマフォ制御回路は、前記共有リソースのロックに成功した前記ロック命令に関する第1エントリをn個nは1以上の整数保持する第1バッファと、前記共有リソースのロックに失敗した前記ロック命令に関する第2エントリをn個nは1以上の整数保持する第2バッファと、前記第1及び第2エントリと、入力されたロック命令との比較に応じて、当該ロック命令に対するロックの成否を判定し、ロック失敗の場合に前記待ち時間を算出する判定回路と、を備える、ことを特徴とする請求項1に記載のマルチプロセッサシステム。前記第1エントリは、ロックの有効性を示す第1Vビット値と、前記共有リソースのアドレスを示す第1アドレスと、前記ロック時間をカウントする第1ロック時間と、を有する構成であり、前記第2エントリは、ロックが失敗したプロセッサがあるか否かを示す第2Vビット値と、前記共有リソースのアドレスを示す第2アドレスと、プロセッサ毎のロック命令の処理状態を示すステータスフラグと、プロセッサ毎のロック命令の入力順序を示す受付番号と、現在ロック中のロック命令のアンロック後にインクリメントされ、アンロック後にロックが許可されるロック命令の識別情報を示す優先番号と、確定した前記ロック時間を保持する第2ロック時間と、を有する構成であることを特徴とする請求項2に記載のマルチプロセッサシステム。前記判定回路は、入力されたロック命令に含まれるアドレスに基づいて、前記第1バッファと、前記第2バッファからそれぞれ対応する前記第1、前記第2エントリを取得し、当該第1、第2エントリにかかる前記第1及び第2Vビット値が共に無効値0である場合、または当該第1エントリにかかる前記第1Vビット値が無効値0でありであり、当該第2エントリにかかる前記第2Vビット値が有効値1であり、かつ当該第2エントリにかかる前記受付番号と前記優先番号とが同じ場合、入力されたロック命令に対してロックを許可し、それ以外の場合にはロックを許可しないことを特徴とする、請求項3に記載のマルチプロセッサシステム。前記判定回路は、ロックに失敗した各プロセッサに対し、当該プロセッサにかかる前記受付番号から前記優先番号を減算した値に前記第2ロック時間の値を乗算した値を前記待ち時間とすることを特徴とする請求項4に記載のマルチプロセッサシステム。前記判定回路は、前記第2ロック時間に初期値が設定されている場合、ロックに失敗した各プロセッサに対し、前記待ち時間として0待ち合わせなしを通知することを特徴とする請求項3乃至請求項5のいずれか1項に記載のマルチプロセッサシステム。複数のプロセッサと、前記複数のプロセッサからアクセスされる共有リソースと、を備えるマルチプロセッサにおいて、プロセッサから発行される前記共有リソースに対するロック命令及びアンロック命令の受信に応じて、前記共有リソースの同期制御を行うマルチプロセッサの制御方法であって、あるロック命令の前記共有リソースのロック時間をカウントし、前記共有リソースのロック中にロック命令を送信したプロセッサの命令送信順序を保持し、確定した前記ロック時間と、前記命令送信順序と、に基づいて、前記共有リソースに対するロックに失敗した各プロセッサのロック命令再発行までの待ち時間を算出して通知する、マルチプロセッサの制御方法。図9に記載したフローでは、図示するようにCPU2~4は、何度もLOCK命令を再発行する。これにより、各CPUCPU2~4の負荷が高くなってしまう。一方、図10に記載したフローでは、図示するようにCPU2~4は、Step4においてLOCK失敗を受信すると、Step14までLOCK命令の再発行を行わない。しかし、CPU1は、Step8においてUNLOCK命令を発行している。すなわち、Step8からStep14までのセマフォの値は、0不使用となり、セマフォの使用効率が悪い。すなわち、図9、図10を参照して説明したマルチプロセッサシステムでは、LOCK命令発行のための負荷が高くなる各CPUの処理負荷が高くなる、または、セマフォの使用効率が悪くなるという問題があった。なお、特許文献1に記載の技術は、図8に示す動作に新規の処理を追加する必要があり、一般的なシステムに適用することが困難である。さらに、特許文献1に記載の技術では、全てのCPUをLOCK解除待ちセマフォの取得待ち状態に遷移させると、LOCK解除待ちの状態にあるCPUは、いつLOCK解除セマフォ取得が行われるかわからない。特許文献2に記載の技術によっても、各CPUがどの程度セマフォの解放を待てばよいかを把握することができなかった。すなわち、上記したいずれの手法によっても、各CPUプロセッサの処理負荷を軽減し、セマフォの使用効率を向上させたマルチプロセッサシステムを実現することが困難であった。本発明は上記した課題に鑑みてなされたものであり、各CPUプロセッサの処理負荷を軽減し、セマフォの使用効率を向上させたマルチプロセッサシステム、マルチプロセッサシステムの制御方法を提供することを主たる目的とする。本発明にかかるマルチプロセッサシステムの一態様は、複数のプロセッサと、前記複数のプロセッサからアクセスされる共有リソースと、プロセッサからの前記共有リソースに対するロック命令及びアンロック命令の受信に応じて、前記共有リソースの同期制御を行うセマフォ制御回路と、を備え、前記セマフォ制御回路は、あるプロセッサの前記共有リソースのロック時間をカウントし、前記共有リソースのロック中にロック命令を送信したプロセッサの命令送信順序を保持し、確定した前記ロック時間と、前記命令送信順序と、を基に前記共有リソースに対するロックに失敗した各プロセッサの待ち時間を算出して通知する、ものである。本発明にかかるマルチプロセッサシステムの制御方法の一態様は、複数のプロセッサと、前記複数のプロセッサからアクセスされる共有リソースと、を備えるマルチプロセッサにおいて、プロセッサからの前記共有リソースに対するロック命令及びアンロック命令の受信に応じて、前記共有リソースの同期制御を行うマルチプロセッサの制御方法であって、あるプロセッサの前記共有リソースのロック時間をカウントし、前記共有リソースのロック中にロック命令を送信したプロセッサの命令送信順序を保持し、確定した前記ロック時間と、前記命令送信順序と、を基に前記共有リソースに対するロックに失敗した各プロセッサの待ち時間を算出して通知する、ものである。本発明では、各CPUプロセッサの処理負荷を軽減し、セマフォの使用効率を向上させたマルチプロセッサシステム、マルチプロセッサシステムの制御方法を提供することができる。<実施の形態1>以下、図面を参照して本発明の実施の形態について説明する。図1は、本実施の形態にかかるマルチプロセッサシステムの全体構成を示すブロック図である。本実施の形態にかかるマルチプロセッサシステムは、一般的なマルチコアプロセッサの構成要素と同一の要素を有する。当該マルチプロセッサシステムは、CPUCentralProcessingUnit1~nと、CPU1~nからアクセス可能なメモリ30と、CPU1~nからメモリ30へのアクセスを制御するメモリコントローラ20と、を有する。CPU1~nは、それぞれ独立してメモリ30にアクセスする。CPU1~nは、メモリ30内の共有メモリメモリ30内の共有される領域であり、共有リソースの一態様であるにアクセスする場合、セマフォを獲得するためのLOCK命令をメモリコントローラ20に発行する。CPU1~nは、メモリ30内の共有メモリの使用後に、セマフォを解放するためのUNLOCK命令をメモリコントローラ20に発行する。さらに、CPU1~nは、メモリコントローラ20からLOCK命令に対するLOCK失敗の通知を受信した場合、LOCK失敗と共に通知される待ち時間だけ待ち合わせを行う。CPU1~nは、待ち合わせの後にLOCK命令を再発行する。一方、CPU1~nは、メモリコントローラ20からLOCK命令に対するLOCK成功の通知を受信した場合、メモリ30の共有メモリにアクセスする。CPU1~nは、処理終了後にメモリコントローラ20に対してUNLOCK命令を発行する。なお、セマフォは、メモリ30の任意のアドレスに配置され、LOCK命令、またはUNLOCK命令に付与するアドレスにより該当するセマフォを指定する。メモリコントローラ20は、CPU1~nからメモリ30へのアクセスを制御する制御装置である。メモリコントローラ20の詳細は、図2のブロック図を参照して説明する。図2は、メモリコントローラ20の構成を示すブロック図である。メモリコントローラ20は、CPU命令調停回路201と、CPU命令デコーダ202と、メモリ制御回路203と、セマフォ制御回路204と、CPU命令返信回路205と、を備える。CPU命令調停回路201は、CPU1~nから受信した命令を調停する回路である。CPU命令デコーダ202は、CPU命令調停回路201が調停した命令をデコードし、デコードした命令がメモリ30へのアクセスである場合に、メモリ制御回路203に当該命令を供給する。CPU命令デコーダ202は、デコードした命令がLOCK命令またはUNLOCK命令である場合、LOCK命令またはUNLOCK命令をセマフォ制御回路204に供給する。セマフォ制御回路204は、受信したLOCK命令またはUNLOCK命令に対して、LOCKが成功したか否かセマフォを獲得できたか否かの判定を行うとともに、LOCKが失敗したセマフォを獲得できない場合の待ち時間の算出を行う。CPU命令返信回路205は、CPU1~nから受信した命令に対する返信を行う回路である。ここで、セマフォ制御回路204について、図3を参照して更に詳しく説明する。図3は、セマフォ制御回路204の内部構成を示すブロック図である。セマフォ制御回路204は、LOCKアドレスバッファ以降の説明では、LABと略して記載する2041と、LOCK競合テーブル以降の説明では、LCTと略して記載する2042と、LOCK成功失敗判定回路2043と、を有する。LAB2041は、ワード0~nnは1以上の任意の整数から構成され、LOCKが成功したセマフォを獲得できたLOCK命令の情報を複数最大n個登録できるバッファである。なお、同一アドレスに対して、同時にLOCKが成功することはあり得ないため、同一アドレスへのLOCK命令は1ワードしか登録されない。LAB2041のワードnは、Vビット20411と、セマフォアドレス20412と、LOCK時間20413と、から構成される。Vビット20411は、ワードnが有効であるか否かを示すビット値である。Vビット20411は、1が設定された場合にLOCK処理が実行されていること有効であることを示す。セマフォアドレス20412は、LOCK命令内に含まれるアドレスメモリ30内において、アクセスしたい共有メモリのアドレスである。LOCK時間20413は、Vビット20411に1が設定された時間ステップ数、すなわちLOCK状態となっている積算時間を保持するカウンタである。さらに、LAB2041は、アドレス比較器20414と、セレクタ20415-1と、セレクタ20415-2と、を有する。アドレス比較器20414は、CPU命令デコーダ202から新たに入力されたLOCK命令内のアドレスと、各ワード内のセマフォアドレス20412と、を比較する。アドレス比較器20414は、CPU命令デコーダ202から新たに入力されたLOCK命令内のアドレスと一致するセマフォアドレス20412のワード番号を検出する。アドレス比較器20414は、検出したワード番号をLOCK成功失敗判定回路2043、セレクタ20415-1、セレクタ20415-2に通知する。セレクタ20415-1は、通知されたワード番号に対応するVビット20411の値を取得して、取得値をLOCK成功失敗判定回路2043に通知する。セレクタ20415-2は、通知されたワード番号に対応するLOCK時間20413の値を取得して、取得値をLOCK成功失敗判定回路2043に通知する。LAB2041は、LOCK成功失敗判定回路2043によりLOCKが成功したと判定された場合、該当するワードのVビット20411の値を0から1に更新する。LAB2041は、Vビット20411の値を1に更新するとともに、該当するワードのLOCK時間20413のカウントVビット20411の有効1期間のカウントを開始する。アドレス比較器20414は、CPU命令デコーダ202からUNLOCK命令を受信した場合、UNLOCK命令に含まれるアドレスと一致するセマフォアドレス20412のワード番号を検出する。LAB2041は、検出したワードのVビット20411を0に更新することによりLOCKを解除しセマフォを解放し、当該ワードのLOCK時間20413のカウントを停止する。なお、UNLOCK命令と同一アドレスのLOCK命令がLCT2042に存在する場合、LOCK時間カウンタ20413の値をLCT2042のLOCK時間に登録する。但し、LCT2042のLOCK時間20426に0以外の値が既に登録されている場合は登録しない。続いて、LCT2042について説明する。LCT2042は、LAB2041と同様に、ワード0~nnは1以上の任意の整数から構成され、LOCKが失敗したセマフォを獲得できなかったLOCK命令の情報を複数最大n個登録できるバッファである。ただし、同一アドレスに対するLOCK命令は1ワードしか登録しない。LCT2042のワードnは、Vビット20421と、セマフォアドレス20422と、ステータスフラグ20423と、受付番号20424と、優先番号20425と、LOCK時間20426と、から構成される。Vビット20421は、ワードnが有効であるか否かを示すビット値である。Vビット20421に1が設定されている場合、有効該当ワードのセマフォアドレス20422にアクセスするLOCK命令が再発行されるであることを示す。セマフォアドレス20422は、LOCK命令内に含まれるアドレスメモリ30内において、アクセスしたい共有メモリのアドレスである。ステータスフラグ20423は、CPUの個数と同じだけ各ワードに設けられる。ステータスフラグ20423は、CPU毎のLOCK成功、失敗のステータスを保持する。ステータスの詳細は後述する。受付番号20424は、CPUの個数と同じだけ各ワードに設けられる。受付番号20424は、各CPUのLOCK命令の受け付け順序発行順序を保持する。優先番号20425は、LOCK失敗したLOCK命令のうち、最も優先順位の高い次に処理を行うLOCK命令の受付番号を保持する。LOCK時間20426は、セマフォアドレス20422と対応するセマフォアドレス20412を持つLAB2041内のワードのLOCK時間20413の値を保持する。LOCK時間20426は、UNLOCK命令の処理時に、LOCK処理を終了したLOCK命令の処理時間が設定される。具体例は、図5及び図6を参照して再度説明する。さらに、LCT2042は、アドレス比較器20427と、セレクタ20428-1~20428-5と、を有する。アドレス比較器20427は、CPU命令デコーダ202から新たに入力されたLOCK命令、UNLOCK命令内のアドレスと、各ワード内のセマフォアドレス20422と、を比較する。アドレス比較器20427は、CPU命令デコーダ202から新たに入力されたLOCK命令内、UNLOCK命令内のアドレスと一致するセマフォアドレス20422のワード番号を検出する。アドレス比較器20427は、検出したワード番号をLOCK成功失敗判定回路2043、及びセレクタ20428-1~20428-5に通知する。セレクタ20428-1~20428-5は、通知されたワード番号に対応する値を接続先から取得して、取得値をLOCK成功失敗判定回路2043に通知する。LCT2042は、入力されたLOCK命令のLOCKが失敗したとLOCK成功失敗判定回路2043に判定され、当該LOCK命令と同一のLOCK命令がLCT2042内に登録されていない場合アドレス比較器20427の比較において入力されたLOCK命令と同一のセマフォアドレス20422を持つワードがない、またはワードがあるがVビット20421に0が設定されている場合、当該LOCK命令の情報をLCT2042に追加する。一方、同一のLOCK命令がLCT2042内に登録されている場合、LOCK成功失敗判定回路2043は、対応するワードのステータスフラグ20423と、受付番号20424と、の値を更新する。ただし、発行元CPUに対応するステータスフラグ20423に既に00以外の値が設定されている場合は処理を行わない。ここで、CPU毎に設定されるステータスフラグ20423は、LOCK命令の処理状態が2ビットで設定される。00は、初期状態を示す。10は、LOCK失敗により、LOCK命令を再発行している状態を示す。11は、LOCKが失敗していたLOCK命令が再発行によりLOCK成功した状態を示す。CPU毎に設定される受付番号20424は、LOCK処理が失敗したLOCK命令の受け付け順序を示す。受付番号20424は、ステータスフラグ20423の更新の際に、ステータスフラグ20423に10が設定されている個数をカウントした値となる。つまり、受付番号20424には、LOCK失敗によりLOCK命令の再発行処理を行っているCPUの数が登録される。例えば、CPU1、CPU2、CPU3の順序でLOCK命令が失敗した場合、CPU1の受付番号20424は0、CPU2の受付番号20424は1、CPU3の受付番号20424は2となる。優先番号20425は、LCT2042に登録されているLOCK命令がLOCK成功する毎にインクリメント1だけ増加する。なお、詳細な動作例は、図5及び図6を参照して後述する。LOCK成功失敗判定回路2043の動作について説明する。LOCK成功失敗判定回路2043は、LAB2041及びLCT2042から索引結果アドレス比較器、またはセレクタが出力した値を受信し、受信した情報からLOCKの成否を判定する。LOCK成功失敗判定回路2043によるLOCKの成否の判定方法を図4に示す。図4は、LAB2041及びLCT2042からの入力と、LOCKの成否判定との関係を示す図である。図4において、Vビットは、LAB2041またはLCT2042から取得したVビットの値を示す。なお、アドレス比較器20414、アドレス比較器20427は、一致するセマフォアドレスを検出できなかった場合、Vビットを0とする。LOCK成功失敗判定回路2043は、項番1LAB2041及びLCT2042に該当するワードがあり、共にVビットが0に設定されていると項番3LAB2041に設定されたVビットが0であり、LCT2042に設定されたVビットが1であり、かつ優先順位が最も高いのケースにはLOCKが成功したと判定する。LOCK成功失敗判定回路205は、項番1、項番3に該当しない場合にはLOCKが失敗したと判定する。詳細な例は、図5、図6を参照して再度説明する。LOCK成功失敗判定回路2043は、LOCKが失敗したと判定した場合、LOCK命令の発行元のCPUに対して通知する待ち時間を算出する。LOCK成功失敗判定回路2043は、LOCK命令の発行元の各CPUに対応する受付番号20424と、優先番号20425と、LOCK時間20426と、から以下の計算式を用いて各CPUの待ち時間を算出する。LOCK成功失敗判定回路2043は、LOCK失敗の情報に算出した待ち時間を付与して、CPU命令返信回路205に送信する。待ち時間=受付番号20243-優先番号20425×LOCK時間20426次に、図5及び図6を参照して、本実施の形態にかかるマルチプロセッサシステム特にメモリコントローラ20、セマフォ制御回路204の動作について説明する。図5は、CPU1~4を有する本実施の形態にかかるマルチプロセッサシステムの動作フローを示す図である。図中において、縦軸は時間軸単位はStepを示し、それぞれの時刻をStep1~26とする。なお、CPU1~4が発行するLOCK命令のアドレスは、全て同じアドレスとする。図6は、図5の各ステップにおいて、CPU1~4が発行したLOCK命令、UNLOCK命令に対するLAB2041、LCT2042の索引結果、及び更新結果を示す図である。Step0では、LAB2041、LCT2042は初期状態に設定され、Vビットは0にリセットされている。また、優先番号20425等も全て0にリセットされている。はじめにCPU1は、Step1において、メモリコントローラ20にLOCK命令を発行する。メモリコントローラ20は、CPU1からLOCK命令を受信する。メモリコントローラ20内のCPU命令調停回路201は、CPU間の調停を行い、CPU1のLOCK命令を選択する。選択されたCPU1のLOCK命令は、CPU命令デコーダ202によりデコードされる。CPU命令デコーダ202は、デコードの結果、LOCK命令であることを認識する。CPU命令デコーダ202は、LOCK命令をセマフォ制御回路204に供給する。セマフォ制御回路204詳細にはアドレス比較器は、受信したLOCK命令のアドレスを用いて、LAB2041とLCT2042を索引する。セマフォ制御回路204LOCK成功失敗判定回路2043は、LAB2041とLCT2042のVビットが0であることを認識し、LOCK成功と判定する。そして、セマフォ制御回路204は、更新処理においてLAB2041に当該LOCK命令を登録し、LOCK時間の計測を開始するなお、図6においては、t1と記載する。。メモリコントローラ20は、Step2において、LOCK成功をCPU1に通知する。CPU2~4は、Step3において、ほぼ同時にメモリコントローラ20にLOCK命令を発行する。メモリコントローラ20内のCPU命令調停回路201は、CPU間の調停を行い、CPU2~4のLOCK命令を選択する。なお、本例では、Step3において、CPU命令調停回路201は、CPU2、CPU3、CPU4の順番でCPU命令デコーダ202にLOCK命令を送信する。CPU命令デコーダ202は、受信した命令をデコードし、LOCK命令をセマフォ制御回路204に供給する。セマフォ制御回路204には、はじめにCPU2からのLOCK命令が入力される。セマフォ制御回路204は、このLOCK命令内のアドレスを基に、LAB2041と、LCT2042を索引する。この索引結果は、図6のStep3内の発行元CPU=CPU2に示す通りである。セマフォ制御回路204は、LAB2041のVビットが1であるため、LOCK処理が失敗したと判定する。さらに、セマフォ制御回路204は、LCT2042のVビットが0であるため、LCT2042に対し、CPU2が発行したLOCK命令を新規登録する。この時、セマフォ制御回路204は、LCT2042のCPU2に対応するステータスフラグ20423に10LOCK失敗により、LOCK命令を再発行している状態を設定し、受付番号20424に0を登録する。Vビット20421には、1を設定する。次にセマフォ制御回路204は、CPU3からのLOCK命令が入力される。セマフォ制御回路204は、このLOCK命令内のアドレスを基に、LAB2041と、LCT2042を索引する。セマフォ制御回路204は、LAB2041のVビットが1であるため、CPU2からのLOCK命令と同様に、LOCK処理が失敗したと判定する。さらに、セマフォ制御回路204は、LCT2042のVビットが1であるため、LCT2042に対応するワードが存在すると判定する。そのため、セマフォ制御回路204は、当該ワードに対し、CPU3に対応するステータスフラグ20423に10を設定し、受付番号20424に1を登録する。セマフォ制御回路204は、CPU4からのLOCK命令についても同様の処理を行う。セマフォ制御回路204は、当該ワードに対し、CPU4に対応するステータスフラグ20423に10を設定し、受付番号20424に2を登録する。なお、上述した処理結果は、図6のStep3の各欄に記載されている。メモリコントローラ20は、Step4において、LOCK失敗をCPU2~4に通知する。この際、セマフォ制御回路204は、LCT2042の索引結果からLOCK命令の再発行までの待ち時間を計算し、算出した値をLOCK失敗の情報と合わせて通知する。しかし、Step4の時点では、CPU1のLOCK処理が完了していない。そのため、セマフォ制御回路204は、待ち時間を0とする。CPU2~4は、メモリコントローラ20からLOCK失敗の通知を受け取ると、LOCK命令の待ち合わせを行う。この場合、待ち時間は0であるため、CPU2~4は、待ち合わせを行わない。CPU2~4は、Step6において、メモリコントローラ20に対してLOCK命令を再発行する。メモリコントローラ20は、Step3にて受信したLOCK命令と同様に処理を行う。すなわち、セマフォ制御回路204は、LAB2041とLCT2042を索引し、LOCK失敗の判定を行う。また、LCT2042内にCPU2~4に対応するステータスフラグ20423が登録されているため、LCT2042の更新は行われない。メモリコントローラ20は、Step7において、LOCK失敗をCPU2~4に通知する。本処理は、Step4における処理と同一であるため、詳細な説明は省略する。また、Step8におけるCPU2~4のLOCK命令の発行処理は、Step6と同一であり、Step9におけるメモリコントローラ20の処理は、Step7と同一であるため、図示及び詳細な説明は省略する。CPU1は、Step8において、メモリコントローラ20に対して、共有メモリへのアクセス命令を発行する。メモリコントローラ20は、当該アクセス命令を受信し、CPUメモリ制御回路203を介してメモリ30にアクセスする。CPU1は、Step9において、メモリコントローラ20に対してUNLOCK命令を発行する。メモリコントローラ20は、UNLOCK命令を受信する。メモリコントローラ20内のセマフォ制御回路204は、UNLOCK命令に含まれるアドレスを基にLAB2041と、LCT2042を索引する索引結果は、図6Step9を参照されたい。。そして、セマフォ制御回路204は、CPU1のLAB2041のVビットを0に設定することによりLOCK命令を解除する。また、セマフォ制御回路204は、LAB2041にて計測したLOCK時間20413をLCT2042のLOCK時間20426に登録する。CPU2~4は、Step10において、LOCK命令をメモリコントローラ20に対して再発行する。本例では、メモリコントローラ20内のCPU命令調停回路201は、CPU4、CPU3、CPU2の順番でLOCK命令をCPU命令デコーダ202に送信する。セマフォ制御回路204は、はじめにCPU4からのLOCK命令を受信する。セマフォ制御回路204は、CPU4からのLOCK命令に含まれるアドレスを基にLAB2041と、LCT2042を索引する索引結果は、図6Step10、CPU=CPU4を参照されたい。。ここで、LAB2041のVビットは0にリセットされているが、LCT2042のVビットは1である。さらに、CPU4の受付番号20424の値2は、優先番号20425の値0と異なるCPU4からのLOCK命令の優先順位が低い。そのため、セマフォ制御回路204は、CPU4からのLOCK命令についてLOCK失敗と判定する。この際、LOCK時間20426が登録されている、すなわちCPU1のLOCK処理時間が確定している。そのため、セマフォ制御回路204は、CPU4の待ち時間を2t1CPU4の受付番号20424の値2から優先順位20425の値0を減算した値に、t1を乗算した値と算出する。CPU4からのLOCK命令と同様の手法により、セマフォ制御回路204は、CPU3からのLOCK命令に対し、LOCK失敗と判定する。また、セマフォ制御回路204は、CPU3の待ち時間をt1CPU3の受付番号20424の値1から優先順位20425の値0を減算した値に、t1を乗算した値と算出する。次にセマフォ制御回路204は、CPU2からのLOCK命令を受信する。セマフォ制御回路204は、CPU2からのLOCK命令に含まれるアドレスを基にLAB2041と、LCT2042を索引する索引結果は、図6Step10、CPU=CPU2を参照されたい。。ここで、LAB2041のVビットは0にリセットされており、LCT2042のVビットは1であり、CPU2の受付番号20424の値0は、優先番号20425の値0と同一であるCPU2のLOCK命令の優先順位が高い。そのため、セマフォ制御回路204は、LOCK成功と判定する。セマフォ制御回路204は、CPU2のLOCK命令をLAB2041に登録し、同時にLCT2042のCPU2にかかるステータスフラグ20423を更新し10から11、優先番号20425の値を更新カウントアップ、0から1する。メモリコントローラ20は、Step11において、CPU2に対してLOCK成功を通知する。メモリコントローラ20は、Step11において、CPU3及びCPU4に対してLOCK失敗を通知する。この通知の際に、メモリコントローラ20は、CPU3に対して待ち時間の値t1をLOCK失敗の情報に含めて通知する。同様に、メモリコントローラ20は、CPU4に対して待ち時間の値2t1をLOCK失敗の情報に含めて通知する。CPU3は、LOCK失敗の通知を受信すると、LOCK失敗の情報に付与された待ち時間t1の情報を取得する。同様に、CPU4は、LOCK失敗の通知を受信すると、LOCK失敗の情報に付与された待ち時間2t1の情報を取得する。これにより、CPU3は、Step15まで待ち合わせを行う。CPU4は、Step20まで待ち合わせを行う。CPU2は、Step13において、共有メモリへのアクセスを実行し、Step14においてUNLOCK命令を発行する。なお、当該処理は、Step8、9におけるCPU1の動作と同じであるため、詳細な説明は省略する。CPU3は、Step15においてt1時間の待ち合わせ処理を終了し、LOCK命令を再発行する。この時、CPU4は、待ち合わせ処理の実行が終了していないため残待ち合わせ時間=2t1-t1=t1、LOCK命令の再発行は行わない。メモリコントローラ20は、CPU3からLOCK命令を受信する。メモリコントローラ20内のセマフォ制御回路204は、CPU3からのLOCK命令に含まれるアドレスを基にLAB2041とLCT2042を索引する。そして、セマフォ制御回路204は、上述の手法によりLOCKが成功したと判定する。メモリコントローラ20は、Step16において、CPU3に対してLOCK成功を通知する。CPU3は、Step18において、共有メモリへのアクセスを実行し、Step19においてUNLOCK命令を発行する。なお、当該処理は、Step8、9におけるCPU1の動作と同じであるため、詳細な説明は省略する。CPU4は、Step20において2t1時間の待ち合わせ処理を終了し、LOCK命令を再発行する。メモリコントローラ20は、CPU4からLOCK命令を受信する。メモリコントローラ20内のセマフォ制御回路204は、CPU4からのLOCK命令に含まれるアドレスを基にLAB2041とLCT2042を索引する。そして、セマフォ制御回路204は、上述の手法によりLOCKが成功したと判定する。この時、LCT2042内のステータスフラグ20423に10の値を持つCPUが存在しなくなる。そのため、セマフォ制御回路204は、LCT2042のVビット20421を0にリセットする。メモリコントローラ20は、Step21において、CPU4に対してLOCK成功を通知する。CPU4は、Step23において、共有メモリへのアクセスを実行し、Step24においてUNLOCK命令を発行する。なお、当該処理は、Step8、9におけるCPU1の動作と同じであるため、詳細な説明は省略する。続いて、本発明にかかるマルチプロセッサシステムの効果を、図5の動作フロー図を参照して説明する。図5に示すように、CPU2~4は、CPU1がUNLOCK命令によりLOCKを解除セマフォを解放するStep9まで、LOCK命令の再発行を繰り返している。しかし、CPU1のLOCK命令の処理時間が確定するCPU2のLOCK命令がLOCK成功となると、CPU3、4は、メモリコントローラ20からLOCK命令の再発行までの待ち時間を受信する。CPU3、4は、この待ち時間の間、LOCK命令の発行を待ち合わせる。CPU3及びCPU4に通知される待ち時間は、メモリコントローラ20が処理するLOCK命令の順序優先順位と、CPU1のLOCK命令の処理時間と、から算出された値である。そのため、CPU3に通知される待ち時間と、CPU4に通知される待ち時間には、異なる時間が指定される。これにより、CPU3及びCPU4がStep11にてLOCK失敗の通知を受信すると、CPU3は、Step15にてLOCK命令を再発行する。一方、CPU4は、Step20にてLOCK命令を再発行する。この待ち時間の設定により、CPU3及びCPU4は、Step11以降に無駄なLOCK命令を発行しない。すなわち、CPU3及びCPU4の処理負荷が、LOCK命令の発行を削減することによって軽減される。さらに、図5に示すように、CPU3及びCPU4は、他のCPUがUNLOCK処理をした直後にLOCK命令を発行している。これにより、セマフォの使用効率を改善することができるLOCKを効率的に行うことができる。なお、上述した特許文献1の手法では、図8に示す動作フローに対して、新たな処理LOCK失敗と判定した場合にLOCK命令の優先順位を登録し、UNLOCK命令の処理後に優先順位の高いCPUにLOCK解除を通知する処理を追加する必要がある。一方、本実施の形態にかかるマルチプロセッサシステムでは、図8に示す動作フローにおいて、待ち時間の最適化処理のみを行うだけで、上述の効果CPU処理負荷の軽減、セマフォの使用効率改善を奏することができる。さらにまた、特許文献1の手法では、前述のようにLOCK解除待ちの状態にあるCPUは、いつLOCK解除セマフォ取得が行われるかわからない。そのため、LOCK解除待ちの状態にあるCPUは、他の処理を行うことなく、LOCK解除の命令を待ち続ける必要がある。一方、本実施の形態にかかるマルチプロセッサシステム内の各CPUは、LOCK命令の再発行までの待ち時間を正確に把握することができる。そのため、各CPUは、待ち時間の間に別の処理を実行することができ、CPUリソースを有効に利用することができる。例えば、図5において、CPU3は、Step12~Step14の間に他の処理を実行できる。また、CPU4は、Step12~~Step19の間に他の処理を実行できる。ここで、図7を参照して、本発明の概要を改めて説明する。図7は、本発明にかかるマルチプロセッサシステムの本質的部分のみを抽出して記載したブロック図である。マルチプロセッサシステムは、CPU1と、CPU2と、メモリコントローラ20と、メモリ30と、を有する。メモリコントローラ20は、セマフォ制御回路204を有する。メモリ30は、CPU1及びCPU2からアクセスされる。すなわち、メモリ30は、共有されるリソースである。セマフォ制御回路204は、CPU1、CPU2からメモリ30へのロック命令、アンロック命令を受信して、メモリ30の同期制御を行う。詳細には、セマフォ制御回路204は、ロックを行ったプロセッサがロック処理を行っている時間ロック処理時間をカウントする。また、セマフォ制御回路204は、ロック中にロック命令を送信したプロセッサの命令送信順序を保持し、算出済みのロック処理時間と、命令送信順序を基に、ロックに失敗した各プロセッサの待ち時間を算出して通知する。なお、セマフォ制御回路204は、ロック成功時にも、ロック成功をロック命令発行元に対して通知する。上述のように、セマフォ制御回路204は、算出済みのロック処理時間と、命令送信順序を基に、各プロセッサの待ち時間を通知する。ロックに失敗した各プロセッサは、ロック命令の発行順に応じた正確な待ち時間を把握することができるため、適切なタイミングでロック命令を再発行できる。これにより、不要なロック命令の発行を回避することができ、CPUの処理負荷を軽減することができる。さらに、正確な待ち時間に基づいてロック命令を再発行するため、セマフォの使用効率を向上することができるアンロック後に即座にロック処理ができる。なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。