Utilisation d'un éditeur Nous allons utiliser le logiciel libre Gedit afin d'écrire nos programmes. Si vous êtes sous Debian ( ou debian-like ) et qu'il n'est pas installé, IL suffit de l'installer via cette commande : sudo apt-get install



Yüklə 0,51 Mb.
səhifə35/43
tarix04.01.2022
ölçüsü0,51 Mb.
#61490
1   ...   31   32   33   34   35   36   37   38   ...   43
    Bu səhifədəki naviqasiya:
  • Acquire
Sections critiques et les mutex

Voici une façon de résoudre ce problème et de s'assurer qu'à tout moment une seule tâche manipule le robot. Ce fut l'approche, nous avons pris dans un chapitre précédent.

mutex moveMutex;

 

task move_square()



{

while (true)

{

Acquire(moveMutex);



OnFwd(OUT_AC, 75);

Wait(1000);

OnRev(OUT_C, 75);

Wait(850);

Release(moveMutex);

}

}



 

task check_sensors()

{

while (true)



{

if (SENSOR_1 == 1)

{

Acquire(moveMutex);



OnRev(OUT_AC, 75);

Wait(500);

OnFwd(OUT_A, 75);

Wait(850);

Release(moveMutex);

}

}



}

 

task main()



{

SetSensor(IN_1,SENSOR_TOUCH);

Precedes(check_sensors, move_square);

}

Le point crucial est que chacune des tâches check_sensors et move_square peuvent commander les moteurs que si aucune autre tâche n'est en train de les utiliser : cela se fait en utilisant l'instruction Acquire qui attend que la variable d'exclusion mutuelle moveMutex soit libérée avant d'utiliser les moteurs. La réciproque de la commande Acquire est la commandeRelease, qui libère la variable mutex pour que d'autres tâches puissent utiliser la ressource critique, les moteurs dans notre cas. Le code à l'intérieur des Acquire-Release est appelée région critique : critiques signifie que ces ressources partagées sont utilisées. De cette façon, les tâches ne peuvent pas interférer les unes avec les autres.




Yüklə 0,51 Mb.

Dostları ilə paylaş:
1   ...   31   32   33   34   35   36   37   38   ...   43




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin