"複数のプロセッサエレメントに対応づけて配置された優先度レジスタと、前記優先度レジスタ毎に配置されたフラグ状態保持手段と、前記優先度レジスタに設定された優先度を比較し、最も高い優先度が設定された前記優先度レジスタに対応する前記フラグ状態保持手段にロック状態を設定する優先度比較回路と、前記優先度レジスタに設定された優先度のうち最高の優先度を格納する最高優先度レジスタと、を有する排他制御装置。前記優先度レジスタは予約ビットを有し、該予約ビットに所定値が設定された前記優先度レジスタの優先度は、前記所定値が設定されていない前記優先度レジスタの優先度よりも高くなる、ことを特徴とする請求項1記載の排他制御装置。前記優先度レジスタの前記予約ビットは最上位ビットである、ことを特徴とする請求項2記載の排他制御装置。前記最高優先度レジスタが格納する最高の優先度は、別の排他制御装置の、前記最高の優先度を設定したプロセッサエレメントに対応づけられた前記優先度レジスタに設定される、ことを特徴とする請求項1~3いずれか1項記載の排他制御装置。複数のプロセッサエレメントと、複数の周辺機器と、前記周辺機器に対応して配置された請求項1~4いずれか1項に記載の複数の排他制御装置と、を有するマイコン。ロック状態になった前記フラグ状態保持手段に対応づけられたプロセッサエレメントに、該フラグ状態保持手段を備えた排他制御装置に対応する前記共有リソースのロックを許可するロック許可手段、を有する請求項5記載のマイコン。所定のプロセッサエレメントが第1の排他制御装置の前記優先度レジスタに設定した優先度が、前記最高優先度レジスタに格納された場合であって、前記所定のプロセッサエレメントが第2の排他制御装置の前記優先度レジスタに優先度を設定する場合、第1の排他制御装置の前記最高優先度レジスタに格納された最高の優先度を、第2の排他制御装置の前記所定のプロセッサエレメントに対応づけられた前記優先度レジスタに設定する優先度設定手段、を有する、請求項5又は6記載のマイコン。しかしながら、特許文献1のような手法はソフトウェアを必要とするという不都合がある。すなわち、スピンロックをソフトウェアで実現するにはアトミック命令が必要になるが、全てのCPUがアトミック命令を実行可能とは限らない。これは、アトミック命令の実装にはハード側CPU側が対応している必要があり、具体的にはアトミック命令に対応した複雑なバス機構が必要なので、コスト高となるためである。このため、CPUによってはソフト的にスピンロックを実現できない場合がある。そこで、マルチコアシステムでは、最悪実行時間を保証すると共に、アトミック命令を実装していないCPUにおいてもスピンロックを実現するための専用のハードウェアが要請される。図1は、スピンロックハードウェアの構成図の一例を示す。スピンロックハードウェアは、コア毎に専用の優先度レジスタ、各優先度レジスタに設定された優先度の比較回路、及び、比較結果に基づきロックを取得したコアを指定するコア毎に専用のロック取得フラグを有する。このスピンロックハードウェアは、各コアが優先度レジスタに優先度を設定することで、各コアが共有リソースをロックできるまでスピンロックする、優先度順の待ち行列キューイングになっている。このようなスピンロックハードウェアをキューイングスピンロックハードウェアという場合がある。しかしながら、図1のようなスピンロックハードウェアでは、以下のような不都合がある。1スレッドの優先度の継承が困難図2はスレッドの優先度を説明する図の一例である。例えば、コア0が、アプリケーション0が有するスレッドAとスレッドAから呼び出されるスレッドaを実行し、コア1が、アプリケーション1が有するスレッドBを実行している。スレッドAは共有リソースR1を使用し、スレッドaとスレッドBは共有リソースR2を使用する。スレッド間の優先順位は次のようになっている。スレッドA>スレッドB>スレッドaコア0がスレッドAの優先度を優先度レジスタに設定すると、スレッドAは他のスレッドよりも優先度が高いので共有リソースR1をロックできる。この後、コア0がスレッドaを実行するため、コア0がスレッドaの優先度を優先度レジスタに設定し、コア1がスレッドBを実行するため、コア1がスレッドBの優先度を優先度レジスタに設定する場合がある。共有リソースR2が解放されていれば、スレッドaとスレッドBの優先度が比較されるが、スレッドBの方が、スレッドaよりも優先度が高いので、スレッドBが共有リソースR2をロックしてしまう。すなわち、スレッドAは処理のためにスレッドaの実行結果を必要とするが、スレッドBの方がスレッドaよりも優先度が高いため、スレッドAが優先度の低いスレッドBの処理を待たなければならない。このような優先度の逆転現象は、共有リソースR1の最高優先度のコアを特定し、共有リソースR2の優先度に承継する仕組みがないために生じる。しかし、スピンロックハードウェアでは優先度を継承する仕組みがないため、優先度が高いスレッドAの最悪実行時間を保証できない場合が生じうる。上記のようにソフトウェアを組み合わせれば実現可能だが、優先度の承継が可能なスピンロックを実現するためのソフト上のオーバーヘッドが大きいため現実的には実現が困難である。2特定のコアを優先する仕組みがない優先度レジスタには、例えば、スレッドが優先度を設定し、各スレッドの優先度が比較される。このため、原則的には設定された優先度の大きいコア又は小さいコアから順に共有リソースをロックできる。しかしながら、あるコアが実行するスレッドが緊急時にのみ起動するような特殊なスレッドの場合、そのスレッドを実行するコアは一般のアプリケーションのスレッドを実行するコアよりも優先されることが好ましい場合がある。このような場合に、図1のスピンロックハードウェアは特定のコアを優先することが困難である。本発明は、上記課題に鑑み、スレッド間の優先度の逆転現象を極力低減し、又は、特定のコアを優先することが可能な排他制御装置を提供することを目的とする。本発明は、複数のプロセッサエレメントに対応づけて配置された優先度レジスタと、前記優先度レジスタ毎に配置されたフラグ状態保持手段と、前記優先度レジスタに設定された優先度を比較し、最も高い優先度が設定された前記優先度レジスタに対応する前記フラグ状態保持手段にロック状態を設定する優先度比較回路と、前記優先度レジスタに設定された優先度のうち最高の優先度を格納する最高優先度レジスタと、を有する排他制御装置を提供する。スレッド間の優先度の逆転現象を極力低減し、又は、特定のコアを優先することが可能な排他制御装置を提供できる。以下、本発明を実施するための形態について図面を参照しながら説明する。図3は、マイコンのハードウェア構成図の一例を示す。マイコン200はワンチップマイコン、基板上でCPU等が別チップになっているマイコンなど実装形態はどのような状態でもよい。図示するマイコン200は、ECUElectronicControlUnitに搭載されることが想定されているがその用途は車両に限定されない。なお、ECUには、マイコン200の他、センサの信号を受け付ける入力チャネル及びそのドライバ、マイコン200の監視IC、電源IC等が搭載される。車載されるECUには、その主要な機能により、エンジンECU、ブレーキECU、ボディECU、ナビゲーションECUAV情報処理ECU、ゲートウェイECU等の種類がある。本実施例のマイコン200はECUの機能の違いに影響されず搭載されることが可能である。また、近年、複数の機能を1つのECUに統合する試みがなされているので、マイコン200の搭載先のECUを機能により区別する必要性も低い。マイコン200は、バスに接続されたCPU11、ROM12、スピンロックハードウェア100、INTC13、RAM14、DMAC15、並びに、I/Oブリッジ16を有し、I/Oブリッジ16にはADC17及びCANコントローラ18が接続されている。CPU11は複数のコア0~nを有し、図にはコア0及びコア1が図示されているが、3つ以上のコアを有していてもよい。コア0、1はそれぞれローカルRAM0,1を作業メモリに使用する。なお、マルチコア型でなく1つのCPUが、レジスタや演算器を切り換えながら並列的に命令を実行することで複数のCPUが存在するように見せるヴァーチャルCPUを有していてもよい。また、チップとして独立した複数のCPUが搭載されていてもよい。複数のコアや複数の独立したCPUをプロセッサエレメントという場合がある。ROM12はフラッシュメモリなどの不揮発メモリであり、CPU11が実行するプログラムや静的なデータを記憶している。プログラムは、コア0が実行するアプリケーション0、コア1が実行するアプリケーション1、及び、OSやデバイスドライバが記憶されている。アプリケーションをより小さい粒度に区分したスレッドやタスクという概念があり、本実施形態でも適宜、アプリケーションからスレッドやタスクを抽出して説明する。なお、説明を容易にするため、各アプリケーションと各コアの関係は固定であるとするが、例えば、OS等がコアにアプリケーションを動的に割り当てることも可能である。この場合、OSはコアとアプリケーションの対応を記憶しているので、OSにとって各アプリケーションと各コアの関係が固定であるか否かによる不都合は少ない。INTC13はIRQやその他の割り込み端子を介して周辺機器から入力された割り込み要求を、周辺機器の優先順位に基づき調停してCPU11に通知する。これによりCPU11は、割り込みした周辺機器に応じて決まった処理を実行する。RAM14は、CPU11がプログラムを実行するための作業領域である。CPU11はメモリバスを介してROMまたはプログラムをSDRAMに移動して実行する場合はSDRAM12からプログラムを読み込み、また、必要であればデータバスを介してRAM14からデータを読み出しプログラムを実行する。DMAC15は、CPU11からの指示によりRAM14からI/Oブリッジ16を介して周辺機器にデータを送信し、周辺機器から割り込みされたCPU11から指示を受けて、I/Oブリッジ16を介して周辺機器からデータを受け取り、RAM14に書き込む。I/Oブリッジ16は、マルチプレクサ又はブリッジ回路であり、チャネル毎にADC17、及び、CANコントローラ18とそれぞれ接続されており、これらの周辺機器とデータを送受信する。ADCanalogtodigitalconverter17は、センサが検出したアナログ信号をデジタル信号に変換する。ADC17にはΔΣ型、逐次比較型、二重積分型などがあるがどのような変換原理で変換してもよい。なお、ADC17もINTC13を介して変換の終了をCPU11に通知する。CANコントローラ18は、車載ネットワークを介して接続された他のECUと通信するための通信装置である。CANコントローラ18は、CPU11から通信データの送信要求を受け付けるとフレームの各フィールドにIDやデータを格納しCANバスに出力する。また、CANコントローラ18は、受信すべきIDの通信データを検出するとそれを取り込みCPU11に割り込んで通知する。図3において、アプリケーションが使用する周辺機器のうち、複数のアプリケーションが使用する周辺機器が共有リソースである。例えば、ADC17とCANコントローラ18が、それぞれ共有リソースR1,R2であるとする。スピンロックハードウェア100以下、区別する場合スピンロックハードウェア1,2...というは、この共有リソース毎に配置される。すなわち、スピンロックハードウェア1はADC用共有リソースR1、スピンロックハードウェア2はCANコントローラ18用共有リソースR2、スピンロックハードウェア3は...、のようにロック対象の共有リソースとスピンロックハードウェアが対応づけられている。コアが共有リソースを使用するためには、スピンロックハードウェア1により共有リソースR1を、スピンロックハードウェア2により共有リソースR2を、それぞれロックしなければならない。図4は、本実施例のスピンロックハードウェア100の構成図の一例を示す。このスピンロックハードウェア100は、ネスト構造のスレッドの優先度を継承可能な点に特徴の1つがある。まず、スピンロックハードウェア100は、コア毎に専用の優先度レジスタ21区別する場合、優先度レジスタ0、1...nという、各優先度レジスタ21に設定された優先度の比較回路22、比較結果に基づきロックを取得したコアを指定するコア毎に専用のロック取得フラグ23区別する場合、ロック取得フラグ0、1...nという、及び、最高優先度レジスタ24を有する。それぞれの優先度レジスタ21には各コアが実行するスレッドの優先度が設定される。また、それぞれの優先度レジスタ21は比較回路22に接続されている。比較回路22は各ロック取得フラグ23に接続されると共に、最高優先度レジスタ24に接続されている。ロック取得フラグ23の状態及び最高優先度レジスタ24の内容は外部から読み取れるようになっている。比較回路22は、全ての優先度レジスタ0~nのうち最も高い優先度が設定された優先度レジスタを特定する。本実施例では数値が大きいほど優先度が高いとするが、逆でもよい。比較回路22は、最も高い優先度が設定された優先度レジスタ0~nに対応するロック取得フラグ0~nに1を設定する。したがって、1が設定されたロック取得フラグ0~nに対応したコア0~nが、スピンロックハードウェア100がロックする共有リソースをロックできたこと使用権を得たことになる。また、比較回路22は、優先度レジスタ0~nのうち最も高い優先度が設定された優先度レジスタ21の値を最高優先度レジスタ24に設定する。最高優先度レジスタ24は、このスピンロックハードウェア100における最高の優先度を常に格納している。図5はスピンロックハードウェア100の作用を説明する図の一例である。図5aに示すように、コア0の優先度が00001111、コア1の優先度が00000011であるとする。設定される優先度は、例えばタイムスタンプとして扱われるカウンタの値である。数値が高い方が優先度が高い場合、カウンタはある設定値から一様に減少する。また、数値が低い方が優先度が高い場合、カウンタは一様に増大する。したがって、いずれの場合も、より早くカウンタから数値を読み出して優先度を設定したコアが優先されるようになる。また、優先度を先に設定したコアが優先されるので、スピンロックハードウェア100はFIFO型の待ち行列キューイングになる。比較回路22は、最も大きい優先度が設定されたコア0のロック取得フラグ0を1にセットする。比較回路22は、コア0以外のコア1のロック取得フラグ1を0にクリアする。ロック取得フラグ0~nのうち、1を出力するのは1つだけである。また、比較回路22は、コア0、1の優先度のうち最も高い優先度である00001111を取得して最高優先度レジスタ24に格納する。次に、コア0が共有リソースを使用する処理を終え、優先度レジスタ1にゼロを設定する。これにより、比較回路22は、最も大きい優先度が設定されたコア1のロック取得フラグ1を1にセットし、コア0のロック取得フラグ0を0にクリアする。比較回路22は、コア0、1の優先度のうち最も高い優先度である00000011を取得して最高優先度レジスタ24に格納する。スピンロックハードウェア100のこのような作用により、OSは共有リソースをロックすべきコアを特定でき、さらに、スレッドが2段以上のネスト構造になっている場合、2段目以降のスレッドに優先度を承継させることができる。図6は、スピンロックハードウェア100を操作する各機能の機能ブロック図の一例である。各アプリケーション1,2がスピンロックハードウェア100を自由に操作すると、この時点で競合が生じるので、一般にはOS等の特定のソフトウェアが例えば、特権モードでスピンロックハードウェア100を操作する。コア0がアプリケーション0を、コア1がアプリケーション1を、それぞれスレッド単位で実行するものとする。アプリケーション0,1は、それぞれロック要求部31、リソース対応処理部32、及び、ロック解放要求部33を有する。各スレッドは、共有リソースR1、R2を使用する際、共有リソースR1又はR2を獲得ロックするため、決まったコマンドを実行する。すなわち、OSにロックを要求する。どのようなコマンドかはCPU11の命令セットによって異なるが、例えば、getresorceリソース名などが知られている。ロック要求部31は、共有リソースR1,R2を使用する直前にこのようなコマンドを発行する。なお、このようなコマンドはOSを呼び出すシステムコールの一種である。この後、ロック要求したコアは、ロックを取得できるまでスピンロック状態になる。ロックを取得したコアはスピンロック状態が終了し、ロックを取得したコアのリソース対応処理部32は、共有リソースR1又はR2を使用した処理を実行する。リソース対応処理部32が共有リソースR1又はR2を使用した処理の実行を終了すると、ロック解放要求部33は、コアがロックしている共有リソースR1を解放アンロックするため、決まったコマンドを実行する。どのようなコマンドかは命令セットによって異なるが、例えば、releaseresorceリソース名などが知られている。この後、ロックの解放を要求したコアは、プログラムに沿って処理を実行する。OSは優先度設定部35、ネスト判定部36、フラグ読み込み部37、及び、最高優先度レジスタ読み込み部38を有する。優先度設定部35は、ロック要求部31からロックの要求を受け付けると、コア0~nに対応する優先度レジスタ0~nに優先度を設定する。優先度は、スレッドが指定する場合、スレッド毎に決まっている場合、又は、OSがスレッドを考慮して動的に決定する場合等がある。本実施例では、スレッドが指定するものとする。よって、優先度設定部35は、ロックを要求したスレッドが指定する優先度を、このスレッドを実行するコア0~nに対応した優先度レジスタ0~nに設定する。なお、優先度設定部35は、ロック解放要求部33が共有リソースR1又はR2のアンロックを要求すると、アンロックを要求したコア0~nに対応した優先度レジスタ0~nに最も優先度が小さい値例えば、ゼロを設定する。これにより、共有リソースのロックがアンロックされる。フラグ読み込み部37はロック変数を更新する。図示するようにロック変数は、コア0~n毎、かつ、共有リソースR1、R2毎に設けられている。フラグ読み込み部37は、スピンロックハードウェアの別により共有リソースR1又はR2を特定し、1を出力したロック取得フラグ0~nに対応したコア0~nのロック変数を1に設定する。また、フラグ読み込み部37は、1に設定したコア以外のロック変数を全て0に設定する。このようにロック変数が1になるのは、1つの共有リソースで1つだけである。リソース対応処理部32は、スレッドを実行するコアのロック変数が1の場合にのみ、共有リソースを使用し、ロック変数が0の場合、スピンロックする。ネスト判定部36は、ロック要求部31が要求したロック要求が、2段以上にネストされたスレッドのロック要求か否かを判定する。なお、ネストとは入れ子を意味し、あるスレッドやルーチンの中に、別のスレッドやルーチンがはめ込まれることをいう。具体的には図2のスレッドAはネスト構造を有し、スレッドaはスレッドAのネスト入れ子になっている。2段以上にネストされたスレッドはここではスレッドaが相当する。スレッドAを実行するコアが共有リソースR1をロックした後、ネストになっているスレッドaのため、別の共有リソースR2のロックを要求する場合がある。例えば、スレッドAが、スレッドaの処理結果を利用するなどの密接な関係があり、スレッドAとスレッドaが異なる共有リソースR1,R2を使用する場合に生じ得る。ネスト判定部36はこのスレッドaが要求するロック要求を検出する。例えば、ネスト判定部36は、ロック要求を受け付けると、ロック要求された共有リソースR2を特定する。そして、ロック要求された共有リソースR2のスピンロックハードウェア2以外で、ロック要求したコア0~nに対応するロック取得フラグ0~nに1が設定されているか否かを判定する。ロック取得フラグ0~nに1が設定されていることは、リソースR2のロック要求したコアと同じコアが別の共有リソースR1をすでにロックしていることになる。このような状況は、2段以上のネストのスレッドaのロック要求があった可能性が高い。なお、ネスト判定部36は、ロック要求部31からの明示的な2段以上にネストされたスレッドaのロック要求であるというロック要求に基づき、2段以上にネストされたスレッドaのロック要求であることを判定してもよい。ネスト判定部36は、以上のようにして判定した判定結果を最高優先度レジスタ読み込み部38に通知する。最高優先度レジスタ読み込み部38は、ロック要求された共有リソースのスピンロックハードウェア以外で、ロック要求したコア0~nに対応するロック取得フラグ0~nに1が設定されているスピンロックハードウェア1の最高優先度レジスタ24の値を読み出す。これにより、ロック要求したコア0~nが設定した優先度このスピンロックハードウェア1において最も高い最高優先度を取得できたことになる。最高優先度レジスタ読み込み部38は、優先度設定部35にスピンロックハードウェア1の最高優先度を通知する。優先度設定部35は、スレッドaがロック要求した共有リソースR2のスピンロックハードウェア2のコア0~nに対応する優先度レジスタ0~nに、最高優先度を設定する。すなわち、スレッドaがロック要求と共にOSに通知した優先度に代えて、最高優先度を設定する。スレッドaがロック要求と共に要求した優先度でなく、最高優先度を2段目のスピンロックハードウェア2の優先度レジスタ21に設定することで、コアが実行しているスレッドAの優先度を、スレッドaの優先度として承継できたことになる。動作手順図7は、主にOSがスピンロックハードウェア100を操作する手順を示すフローチャート図の一例である。まず、優先度設定部35は、アプリケーション0のスレッドAのロック要求部31から、共有リソースAの指定と共に、ロック要求と優先度を取得するS10。実際にはまず、ネスト判定部36が、2段以上にネストされたスレッドaのロック要求であるか否かを最初に判定するが、ここでは省略している。次に、優先度設定部35は、共有リソースR1に対応したスピンロックハードウェア1の、ロック要求したコア0~nに対応する優先度レジスタ0~nに優先度を設定するS20。この後、フラグ読み込み部37は、スピンロックハードウェア1のロック取得フラグ0~nを監視して、スレッドAを実行しているコアがロックを取得したか否かを判定するS30。例えば、すでに別のコアが共有リソースR1をロックしていた場合、この別のコアが実行するスレッドを終了するなどして共有リソースR1を解放するまで、ロック要求したコアはスピンロックする。スレッドAがロックを取得した場合S30のYes、最高優先度レジスタ読み込み部38は、最高優先度レジスタ24の値を読み取るS40。ロックを取得するコアが変われば、最高優先度レジスタ24の値も変わるので、最高優先度レジスタ24の値が更新されるなどのタイミングで最高優先度を取得すればよい。最高優先度レジスタ24の値によりスレッドAの優先度の承継が可能になる。次に、スレッドAの実行中、スレッドAにネストされたスレッドaが実行される。スレッドaは共有リソースR2を必要とするため、スレッドaのロック要求部31は共有リソースR2の指定と共に、ロック要求と優先度を優先度設定部35に通知する。これにより、優先度設定部35は、共有リソースR2の指定と共に、ロック要求と優先度を取得する。ここで、ネスト判定部36は、ロック要求された共有リソースR2のスピンロックハードウェア2以外で、ロック要求したコアに対応するロック取得フラグ0~nに1が設定されているか否かを判定することで、優先度を承継するか否かを判定する。優先度を承継すべき場合、優先度設定部35は、最高優先度レジスタ読み込み部38が読み取った最高優先度レジスタ24の値を、スピンロックハードウェア2のスレッドaを実行するコアに対応する優先度レジスタ21に設定するS50。こうすることでスレッドaの優先度がスレッドAと同じになる。フラグ読み込み部37は、スピンロックハードウェア2のロック取得フラグ0~nを監視して、スレッドaを実行しているコアがロックを取得したか否かを判定するS60。取得できない場合は、スレッドAよりも優先度の高いスレッドが共有リソースR2を使用していることになるので、スレッドaを実行しているコアはスピンロックする。このため、処理はステップS40に戻る。スレッドaを実行しているコアが共有リソースR2のロックを取得した場合S60、フラグ読み込み部37は、スレッドaを実行するコアの共有リソースR2のロック変数のみを1にして、他を0に設定する。これにより、スレッドaは共有リソースR2を排他的に使用することができるS70。以上説明したように、本実施例のスピンロックハードウェア100は、CPU11がアトミック命令を有していない場合でも、ハード的にスピンロックを実現できる。また、スレッドがネスト構造を有していても、2段目のスレッドが1段目のスレッドの優先度を承継できるので、ネスト構造を有するスレッドの最悪実行時間を保証できる。本実施例では、さらにコア0~nのいずれかを選択的に優先できるスピンロックハードウェア100について説明する。図8aは、本実施例のスピンロックハードウェア100の構成図の一例を示す。図8において図4と同一部には同一の符号を付しその説明は省略する。このスピンロックハードウェア100は、コア毎にローカル優先ビットを有し、特定のコアを優先可能な点に特徴の1つがある。図8bはローカル優先ビットの一例を示す図である。ローカル優先ビットは、優先度レジスタ21の先頭の1ビットとする。すなわち、優先度レジスタ21のビット数が8であれば、優先度レジスタ21の下位7ビットに優先度が設定され、MSBmostsignificantbitにローカル優先ビットが割り当てられる。比較回路22は、実施例1と同様に、各コア0~nのローカル優先ビット優先度を比較して、最も大きい値のコアのロック取得フラグ0~nを1にセットする。これにより、スピンロックハードウェア100は以下のように作用する。コア0~nが優先的に共有リソースをロックするのでなければ、ローカル優先ビットは0なので、実施例1と同様に、最も高い優先度を設定したコア0~nが優先的に共有リソースを使用できる。コア0~nのいずれか1つのコアが、優先的に共有リソースをロックする場合、1つの優先度レジスタ21のローカル優先ビットだけが1なので、ローカル優先ビットを1に設定したコアが優先的に共有リソースを使用できる。コア0~nのいずれか2つ以上のコアが、優先的に共有リソースをロックする場合、複数のローカル優先ビットが1になる。この場合、ローカル優先ビットを1に設定した複数のコアのうち、優先度レジスタの下位7ビットに最も高い優先度を設定したコアが優先的に共有リソースを使用できる。ローカル優先ビットの必要性コア0~nが優先的に共有リソースを使用する必要がある場合、換言すると、あるコア0~nに優先的に共有リソースを使用させてよい場合とは、例えば、異常検出時のフェールセーフ処理、優先度の高い割り込み処理、OSなど管理用ソフトの特定処理などである。また、例えば、一定時間以上、共有リソースが解放されるまで待機しているスピンしているスレッドが、ローカル優先ビットを1に設定することができてもよい。この設定は、OSの優先度設定部35が、スピンロックしているコアを監視して、一定時間以上経過すると自律的に設定することが好ましい。しかし、各スレッドがローカル優先ビットを1に設定することが許可されていても、下位7ビットにより優先度が比較されるので、各スレッドがローカル優先ビットを1に設定しても優先度が逆転することはない。動作手順図9aは、ローカル優先ビットに0が設定された場合のOSの処理手順の一例を、図9bは、ローカル優先ビットに1が設定された場合のOSの処理手順の一例を、それぞれ示すフローチャート図である。図9aにおいて、優先度設定部35は、スレッドAのロック要求部31から、共有リソースAの指定と共に、ロック要求と優先度を取得するS10。次に、優先度設定部35は、共有リソースR1に対応したスピンロックハードウェア1の、ロック要求したコア0~nに対応する優先度レジスタ0~nに優先度を設定するS20。ここでは、ローカル優先ビットは0である。この後、フラグ読み込み部37は、スピンロックハードウェア1のロック取得フラグ0~nを監視して、スレッドAを実行しているコアがロックを取得したか否かを判定するS30。取得できない場合は、スレッドAよりも優先度の高いスレッドが共有リソースR1を使用していることになるので、スレッドAを実行しているコアはスピンロックする。このため、処理はステップS30に戻る。スレッドAがロックを取得した場合S30のYes、スレッドAは排他的に共有リソースR1を使用して処理することができるS70。続いて、図9bにおいて優先度設定部35は、アプリケーション0のスレッドAのロック要求部31から、共有リソースAの指定と共に、ロック要求と優先度を取得するS10。次に、優先度設定部35は、共有リソースR1に対応したスピンロックハードウェア1の、ロック要求したコアに対応する優先度レジスタに優先度を設定するS22。ここでは、スレッドA又はOSがローカル優先ビットを1に設定したものとする。これにより、スレッドAは優先的に共有リソースR1をロックできる可能性が高くなる。この後、フラグ読み込み部37は、スピンロックハードウェア1のロック取得フラグ0~nを監視して、スレッドaを実行しているコアがロックを取得したか否かを判定するS30。取得できない場合は、スレッドAよりも優先度の高いスレッドがローカル優先ビットを1に設定して共有リソースR1を使用していることになるので、スレッドAを実行しているコアはスピンロックする。このため、処理はステップS30に戻る。スレッドAがロックを取得した場合S30のYes、スレッドAは排他的に共有リソースR1を使用して処理することができるS70。なお、図9bの処理はネストがない1段目のみ処理であるが、2段以上のネストがある場合も同様である。すなわち、1段目のスレッドAがローカル優先ビットを1に設定すれば、2段目のスレッドaもこの優先度を承継できる。1段目のスレッドAがローカル優先ビットを0に設定した場合に、2段目のスレッドaがローカル優先ビットを1に設定した場合もこのような優先度の関係は通常は生じない、優先度設定部35は2段目のスレッドaの優先度を優先度レジスタ21に設定しないので、1段目のスレッドAの優先度が承継される。以上説明したように、本実施例のスピンロックハードウェアは、実施例1の効果に加え、特定のコアに優先的に共有リソースをロックさせ処理を実行させることができる。"