CでLinkedListを作成したところ、clear
という機能があります。C - スレッド内のデータ構造を解放する?
clear関数はLinkedListを反復処理し、各ノードでfree()
を呼び出します。つまり、それは非常に遅いO(n)
関数です。
私が代わりに私のroot
ノードを提供し、pthread
(または私は知らない、いくつかの他のスレッドライブラリ)を作成する必要がありますが、NULLに私のLinkedListのroot
ノードを設定し、その後、スレッドは、リスト中にメモリーをクリーンアップしています今すぐすぐに追加する準備ができていますか?これを行う際に危険がありますか?それは、それを正しく説明するのに十分なスペースがある前に、ユーザーがLinkedListにデータを追加できることを意味しますか?それはクレジットカードのようなものですが、記憶のためです。
これは安全ですか?このような状況に対して、堅牢で迅速なコードを作成するにはどうすればよいでしょうか?
"...かなり遅いです。 - 何に比べて?確かに、あなたが思っているようにメモリが漏れているのは、しばしばより高速です。それが言った:あなたが何を求めているのか明確ではない。必要な情報をすべて[mcve]に提供してください。 – Olaf
リンクされたリストは、通常、パフォーマンスが低下し、解放が原因ではありません。ベンチマークがないと、参照機械と性能要件はこの問題に答えることができません。 – nwp
私の意見では、これはリンクされたリスト全体をクリアする唯一の方法です。 "自分のLinkedListのルートノードをNULLに設定してから、スレッドがメモリをクリーンアップするようにする"もしあなたが他のノードにアクセスするにはどうすればいいですか? – Mouin