0

ツリーがあり、ツリーの各ノードに条件変数があるとします。

5 つのノードがツリー (既に 10 個のノードがある) に挿入しようとしていて、5 つのノードが挿入できなかった (いくつかのノードが削除されるのを待っている) と仮定すると、条件変数を使用してそれらを待機させます。 . ツリーで削除が行われているので、待機中のノードがその削除を待っているかどうかを確認したいので、ノードにシグナルを送ります。最初に挿入された条件変数?

特定の削除で、(他の 2 つと共に) 待機中のスレッド 3 に通知したい場合、具体的にスレッド 3 に通知するにはどうすればよいですか?

私の削除関数では、シグナルを送ると、各ノードには条件変数があり、それぞれが条件変数を待っている複数のノードが存在する可能性があるため、待機しているスレッドの条件変数が何であるかわかりません。ブロードキャスト all がすべてのスレッドに接続することは知っていますが、それなしでそれを行うにはどうすればよいでしょうか。具体的には、スレッドが最初にツリーに値 5 を挿入したかったことを通知しますが、5 が既に存在するため、それはできませんでした。その 5 が削除された場合、5 を挿入する必要がありますが、待機中の 5 と共に 1,6,3,2 が待機しているため、5 つの条件変数があり、どれが 5 用かわかりません。

これはすべて Linux を使用した C 言語です。

4

1 に答える 1