私は条件変数の読み取りの分担を行いましたが、それらの使用方法を理解できずに立ち往生しています。
私はツリーを持っています。現在、すでに存在するノードを挿入すると、0 が返されます。これは、既に存在しているため失敗したことを意味します。
私は現在、pthreads サポートを拡張したいと考えています。既に存在して 0 を返すので実行できないと言うのではなく、待機キューに置き、要求されたノードが削除されたら、先に進んで挿入します。
例えば、
ツリーに値が 1、5、10 の 3 つのノードがあるとします。値が 10 の新しいノードを挿入したい場合は、0 を返して値が既に存在するというエラーをスローするのではなく、値が 10 のノードを待つ必要があります。削除するには、削除したら、戻って挿入する必要があります。
私の挿入関数elseブロックは、ノードがその値で存在することを以前に検査した後、0を返します。それが存在することを知るロジックが正常に機能することを確信できます。今は、待機する場所に条件付き変数サポートを追加しようとしています. datafield 条件は挿入の最初の行で初期化されるため、それも同様に行われます。このブロックに入ると、cond_wait が実行される唯一のコード行になり、delete が合図するまで単に待機することを期待しています。ここでの私のアプローチは正しいですか?削除されている場合、どのように通知すればよいですか? ここで私を助けてください、私はこれを理解しようとする例を読んだり見たりするのに何時間も費やしました.
コード、
else
{
//IF DUPLICATE EXISTS
pthread_mutex_lock(&m);
node->counter++;
pthread_cond_wait(&node->condition, &m);
_insert(string, strlen, ip4_address, node, NULL, NULL);
pthread_mutex_unlock(&m);
return 1;//I CHANGED IT FROM 0 to one, since if signalled, and if reached to this limit
//it was probably successful
}