es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecución, bloqueo y desbloqueo de un árbol n-ario en una máquina multi-núcleo.

Digamos que estás ejecutando el bloqueo/desbloqueo en una máquina multinúcleo. Ahora quieres permitir que múltiples hilos ejecuten lock() simultáneamente. El bloqueo de un nodo tiene múltiples validaciones internas. Hacer el bloqueo en dos nodos causará una condición de carrera. ¿Cómo puedo resolverlo?

“`
class narytree {
public:
bool isLock;
bool isLockable;
narytree* parent;
vector<narytree<em>> children;
narytree()
{
isLock = false;
isLockable = true;
parent = NULL;
}
narytree(narytree</em> parent)
{
isLock = false;
isLockable = true;
this->parent = parent;
}
};

bool isLock(narytree* node) { return node->isLock; }

void Lock(narytree* node)
{
if (node->isLockable == false)
return;

<pre><code>narytree* T = node;
bool flag = false;
while (T != NULL) {
if (T->isLock == true) {
flag = true;
break;
}
T = T->parent;
}
if (flag)
return;
else {
node->isLock = true;
T = node;
// marcando isLockable como falso para los nodos antecesores.
while (T != NULL) {
T->isLockable = false;
T = T->parent;
}
}
</code></pre>

}

void unLock(narytree* node)
{
if (node->isLock == false)
return;
narytree* T = node;
node->isLock = false;
// marcando isLoackable como verdadero para los nodos antecesores.
while (T != NULL) {
T->isLockable = true;
T = T->parent;
}
}
“`</narytree*>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver la condición de carrera al permitir que múltiples hilos ejecuten lock() simultáneamente, podemos utilizar un mecanismo de bloqueo como un mutex. Podemos crear un objeto mutex en la clase narytree y utilizarlo para bloquear y desbloquear el nodo mientras se realizan las validaciones. Esto asegurará que solo un hilo pueda acceder al nodo a la vez y evitará una condición de carrera.

    Con el uso de un mutex, podemos asegurar que solo un hilo pueda acceder al nodo a la vez y evitar una condición de carrera.

Comments are closed.