私のコードはAVLツリーで、mutex
で入力しようとしています。ミューテックスは機能しません
mutex
は機能しません。どうして?
黒い画面を返します。おそらくデッドロックです。 私は分かりません。 再帰関数はありません。
lock guard
を使用すると正常に動作します。 std::lock_guard
template<typename T> int avl<T>::insere (int key , T data) {
mtx.lock();
no * nw = new no;
if (nw == NULL)
return 0;
nw->sire = NULL;
nw->left = NULL;
nw->right = NULL;
nw->key = key;
nw->data = data;
if (tree.root == NULL) {
tree.root = nw;
tree.quant++;
return 1;
}
no * son = tree.raiz;
no * sire = NULL;
while (son != NULL) {
sire = son;
if (key < son->key)
son = son->left;
else
son = son->right.;
}
nw->sire = sire;
if (key < sire->key)
sire->left = nw;
else
sire->right = nw;
tree.quantidade++;
no * current = nw;
while (current != NULL) {
int f = fator (nw);
if (f >= 2 || f <= 2)
balance(current);
current = current->sire;
}
mtx.unlock();
return 1;
}
あなたのミューテックスをロック解除しない関数には複数のreturn文があります。 lock_guardはこれを自動的に行います。あなたがそれを使用しない場合は、返す前にミューテックスをロック解除する必要があります – Hayt
ありがとう、それは働いた –