こんにちわ。よろしければ教えてください。

以下が環境です。

 ・HP-UX で共有メモリを使用するプログラムを作成している
 ・共有メモリの排他制御にセマフォを使用している
 ・セマフォは専用の管理クラスを作成して使用している
 ・セマフォクラスの同じキー値?を管理しているインスタンスは
  同一プロセス内に複数存在する

やりたいことは以下のとおりです。

 ・同一プロセス内で同じキー値?を管理している異なるインスタンスによる
  排他制御によるデッドロック?を回避したい

たとえば以下のようなことをした場合にデッドロックにならないようにしたいのです。

 void a()            void b()
 {                {
  semafore sem1;        semafore sem2;
  sem1.lock();           sem2.lock(); ← ここでロックがかからないようにしたい
  b();                sem2.unlock();
  sem1.unlock();        }
 }
  
static な配列か何かを作成して、そこにセマフォのキー値と、そのキー値を利用した
lock の回数を保存して、0 → 1 の時にだけ lock、1 → 0 の時にだけ unlock というくらいしか
方法が思い浮かばないのですが、良い方法はないでしょうか。
出来たら便利と思い方法を考えていたのですが、この手のことの経験があまりなく良い方法が
浮かびません。ご教示頂ければ幸いです。