<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Comprendre tout simplement</title>
	<atom:link href="https://blog.developpez.com/comprendre/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/comprendre</link>
	<description></description>
	<lastBuildDate>Fri, 16 Dec 2011 13:04:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Base de données  et système de gestion de base de données (SGBD) :</title>
		<link>https://blog.developpez.com/comprendre/p10593/base-de-donnees/base_de_donnees_et_systeme_de_gestion_de</link>
		<comments>https://blog.developpez.com/comprendre/p10593/base-de-donnees/base_de_donnees_et_systeme_de_gestion_de#comments</comments>
		<pubDate>Fri, 16 Dec 2011 12:54:53 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Base de données]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Base de données = Ensemble de données stockées dans un dispositif informatique. Pour être plus clair, les données sont présentes en mémoire dans des tables par exemple… L’utilisateur n’a pas besoin de savoir comment ces tables sont implémentées. Il s’agit d’une vision conceptuelle. C’est comme si on utilise une liste comme structure de données sans pour autant savoir comment cette dernière est implémentée. Pour manipuler les données stockées dans la Base, l’utilisateur fait appel à [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Base de données = Ensemble de données stockées dans un dispositif informatique.<br />
Pour  être plus clair, les données sont présentes en mémoire dans des tables par exemple…<br />
L’utilisateur n’a pas besoin de savoir comment ces tables sont implémentées. Il s’agit d’une vision conceptuelle. C’est comme si on utilise une liste comme structure de données sans pour autant savoir comment cette dernière est implémentée.<br />
Pour manipuler les données stockées dans la Base, l’utilisateur fait appel à un langage de requête (exemple SQL). La demande de ce dernier est prise en compte par le système qui gère la base à savoir le SGBD (accès aux données, lecture, écriture, ….).<br />
En Anglais, ce système peut  être appelé par  DBM (Data Base Management).</p>
<p>Il existe plusieurs systèmes de gestion de base de données présents sur le marché.  Ce lien me parait pertinent ;  merci  pour l’auteur !</p>
<p>http://fadace.developpez.com/sgbdcmp/</p>
<p>Dans un contexte d’utilisation d’un SGBD ( je me refuse de dire Dans un SGBD ! sinon la confusion est totale), on distingue 4 couches :</p>
<p><strong>Couche utilisateur :</strong></p>
<p>Le programme d’application.<br />
La gestion des sauvegardes,  délais d’archivages,… (Le Data Administrator : DA).<br />
Les aspects techniques comme la création de la base, ses performance (Le Data base Administrator : DBA ).<br />
(Le DA opère sur les données tandis que le DBA opère sur la base elle-même).</p>
<p><strong>Couche logiciel :</strong> Comprend le SGBD</p>
<p><strong>Couche BD :</strong> La base de données en tant que structure.</p>
<p><strong>Couche matériel :</strong> la plate forme et d’une manière générale l’ordinateur.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser un package Java (.jar) dans un projet Eclipse</title>
		<link>https://blog.developpez.com/comprendre/p10471/java/utiliser_un_package_java_jar_dans_un_pro</link>
		<comments>https://blog.developpez.com/comprendre/p10471/java/utiliser_un_package_java_jar_dans_un_pro#comments</comments>
		<pubDate>Sat, 05 Nov 2011 14:59:32 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[JAVA]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Utiliser un package Java (.jar) dans un projet Eclipse : Ouvrir les propriétés du projet (Menu Project > Properties), aller à la rubrique Java Build Path et dans l&#8217;onglet Librairies. Là tu peux &#171;&#160;ajouter&#160;&#187; une librairie Java que tu possède sous forme de fichier .jar Le bouton &#171;&#160;Add JARs&#8230;&#160;&#187; permet de lier un fichier se trouvant dans le workspace Eclipse. Le bouton &#171;&#160;Add External JARs&#8230;&#160;&#187; permet de lier un fichier se trouvant n&#8217;importe où sur [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Utiliser un package Java (.jar) dans un projet Eclipse :<br />
Ouvrir les propriétés du projet (Menu Project > Properties), aller à la rubrique Java Build Path et dans l&rsquo;onglet Librairies.<br />
Là tu peux &laquo;&nbsp;ajouter&nbsp;&raquo; une librairie Java que tu possède sous forme de fichier .jar<br />
Le bouton &laquo;&nbsp;Add JARs&#8230;&nbsp;&raquo; permet de lier un fichier se trouvant dans le workspace Eclipse.<br />
Le bouton &laquo;&nbsp;Add External JARs&#8230;&nbsp;&raquo; permet de lier un fichier se trouvant n&rsquo;importe où sur tes disques.  </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tableau et ArrayList</title>
		<link>https://blog.developpez.com/comprendre/p10455/java/list</link>
		<comments>https://blog.developpez.com/comprendre/p10455/java/list#comments</comments>
		<pubDate>Mon, 31 Oct 2011 14:17:59 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[JAVA]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[ArrayList change de taille dynamiquement mais pas un tableau. le tableau ne se redimensionne pas tout seul et il ne décale rien alors que ArrayList le fait. On peut appeler une méthode sur une ArrayList mais pas sur un tableau. On retire plus facilement des objets d&#8217;une arrayList que d&#8217;un tableau. ArrayList ne peut pas contenir des types primitifs alors qu&#8217;un tableau oui. (nécéssité de les mettre dans des objets : classes enveloppes). Un tableau [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>ArrayList change de taille dynamiquement mais pas un tableau.</p>
<p>le tableau ne se redimensionne pas tout seul et il ne décale rien alors que ArrayList le fait.</p>
<p>On peut appeler une méthode sur une ArrayList mais pas sur un tableau.</p>
<p>On retire plus facilement des objets d&rsquo;une arrayList que d&rsquo;un tableau.</p>
<p>ArrayList ne peut pas contenir des types primitifs alors qu&rsquo;un tableau oui.<br />
(nécéssité de les mettre dans des objets : classes enveloppes).</p>
<p>Un tableau peut être plus rapide mais dans des situations rares.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Différence entre ArrayList et LinkList</title>
		<link>https://blog.developpez.com/comprendre/p10454/java/difference_entre_arraylist_et_linklist</link>
		<comments>https://blog.developpez.com/comprendre/p10454/java/difference_entre_arraylist_et_linklist#comments</comments>
		<pubDate>Mon, 31 Oct 2011 14:17:22 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[JAVA]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans le cas de l&#8217;arraylist, les données sont stockées dans un tableau. A l&#8217;instanciation, un tableau est créé et rempli en faisant des add. Le problème, c&#8217;est que si on ajoute trop d’éléments, le tableau va etre trop petit. Il va donc devoir être recréé et recopié. Pire, si on supprime un élément en plein milieu de la liste, il faut décaler tous les éléments suivants. L&#8217;arraylist est donc bien adapté pour stocker des données [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans le cas de l&rsquo;arraylist, les données sont stockées dans un tableau. A l&rsquo;instanciation, un tableau est créé et rempli en faisant des add. Le problème, c&rsquo;est que si on ajoute trop d’éléments, le tableau va etre trop petit. Il va donc devoir être recréé et recopié. Pire, si on supprime un élément en plein milieu de la liste, il faut décaler tous les éléments suivants.<br />
L&rsquo;arraylist est donc bien adapté pour stocker des données qu&rsquo;on ne va pas supprimer ensuite.</p>
<p>La linkedList, elle, stocke les données sous forme de liste chainée. On peut donc ajouter autant d’élément qu&rsquo;on veut, il n&rsquo;y a pas de problème. Et en cas de suppression, il suffit de faire pointer le maillon précédent sur le maillon suivant pour supprimer un maillon. Par contre, pour l’élément l&rsquo;indice n, il faut parcourir n éléments. Cette liste n&rsquo;est donc pas adaptée pour accéder aux éléments d’après leur indice.</p>
<p>Le choix du bon type de liste/map peut changer les performances d&rsquo;une application.<br />
<strong><br />
Les accès :</strong></p>
<p>Une ArrayList est gérée en interne par un tableau. On peut donc accéder en temps constant à n&rsquo;importe quel élément par &laquo;&nbsp;monArrayList.get(nb);&nbsp;&raquo;.</p>
<p>Avec une LinkedList, une telle commande est catastrophique en termes de performances (il faut passer par les nb-1 premiers éléments pour accéder au nb-ième). </p>
<p><strong>Dans les faits :</strong></p>
<p>    Une ArrayList est adaptée aux accès directs et aux listes de taille fixe. Elle peut devenir un trou de performance dans le cas ou la capacité de la liste varie brutalement et rapidement dans le temps (ce qui implique de multiple allocations / recopies de tableaux).<br />
    Une LinkedList est adaptée aux listes de taille dynamique avec ajout/retrait en début ou fin de liste ou via une position pointée par un itérateur (et non un indice). Elle peut devenir un trou de performance en cas d&rsquo;un nombre important d’accès directs via des indices (encore plus si la liste est grande).</p>
<p>En théorie le parcours via itérateur devrait être un poil plus rapide sur une ArrayList que sur une LinkedList de par sa structure contiguë. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer un dossier sur le disque dur C:</title>
		<link>https://blog.developpez.com/comprendre/p10441/premiers-pas-en-informatique/creer_un_dossier_sur_le_disque_dur_c</link>
		<comments>https://blog.developpez.com/comprendre/p10441/premiers-pas-en-informatique/creer_un_dossier_sur_le_disque_dur_c#comments</comments>
		<pubDate>Wed, 26 Oct 2011 16:32:45 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Premiers pas en informatique]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Double-clic sur poste de travail, puis double-clic sur Disque local (C:) A droite de la fenêtre et dans un espace vide, clic droit : puis déplacez la souris sur Nouveau. Une aure fenêtre s&#8217;affiche,Double-clic sur Dossier : Saisissez un nom à votre dossier en remplacement du nouveau dossier.]]></description>
				<content:encoded><![CDATA[<p>Double-clic sur poste de travail, puis double-clic sur Disque local (C:)</p>
<p>A droite de la fenêtre et dans un espace vide, clic droit :</p>
<p><img src="http://blog.developpez.com/media/ast1.gif" width="227" height="218" alt="" /> </p>
<p>puis déplacez la souris sur Nouveau. Une aure fenêtre s&rsquo;affiche,Double-clic sur Dossier  :</p>
<p><img src="http://blog.developpez.com/media/ast2.gif" width="274" height="64" alt="" /></p>
<p>Saisissez un nom à votre dossier en remplacement du nouveau dossier.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enregistrer sous</title>
		<link>https://blog.developpez.com/comprendre/p10442/premiers-pas-en-informatique/enregistrer_sous</link>
		<comments>https://blog.developpez.com/comprendre/p10442/premiers-pas-en-informatique/enregistrer_sous#comments</comments>
		<pubDate>Wed, 26 Oct 2011 16:48:06 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Premiers pas en informatique]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Cliquez sur Fichier puis enregistrer sous, une fenêtre s&#8217;ouvre. Vous avez le choix entre : cliquer sur l&#8217;icône dossier parent . ou la flèche Vous pouvez ainsi vous déplacer dans l&#8217;arborescence pour choisir le répétoire dans lequel vous voulez sauvegarder le fichier.]]></description>
				<content:encoded><![CDATA[<p>Cliquez sur <strong>Fichier</strong> puis <strong>enregistrer sous</strong>, une fenêtre s&rsquo;ouvre.<br />
Vous avez le choix entre :</p>
<p>cliquer sur l&rsquo;icône dossier parent .<img src="http://blog.developpez.com/media/e1.gif" width="40" height="19" alt="" /> </p>
<p> ou </p>
<p>la flèche  <img src="http://blog.developpez.com/media/fleche_01.jpg" width="17" height="17" alt="" /></p>
<p>Vous pouvez ainsi vous déplacer dans l&rsquo;arborescence pour choisir le répétoire dans lequel vous voulez sauvegarder le fichier.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser 7-ZIP</title>
		<link>https://blog.developpez.com/comprendre/p10443/premiers-pas-en-informatique/utiliser_7_zip</link>
		<comments>https://blog.developpez.com/comprendre/p10443/premiers-pas-en-informatique/utiliser_7_zip#comments</comments>
		<pubDate>Wed, 26 Oct 2011 17:06:28 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Premiers pas en informatique]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voila un lien intéressant : http://pctutoriel.servhome.org/tutoriel/7-zip.php Un autre lien,les manipulations sont expliquées à partir de la page 11: http://www.framasoft.net/IMG/tutoriel_7-zip-1.pdf]]></description>
				<content:encoded><![CDATA[<p>Voila un lien intéressant :</p>
<p>http://pctutoriel.servhome.org/tutoriel/7-zip.php</p>
<p>Un autre lien,les manipulations sont expliquées à partir de la page 11:</p>
<p>http://www.framasoft.net/IMG/tutoriel_7-zip-1.pdf</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Correction : Le Coiffeur fatigué</title>
		<link>https://blog.developpez.com/comprendre/p10047/programmation-concurrente/semaphore/correction_le_coiffeur_fatigue</link>
		<comments>https://blog.developpez.com/comprendre/p10047/programmation-concurrente/semaphore/correction_le_coiffeur_fatigue#comments</comments>
		<pubDate>Sun, 12 Jun 2011 15:38:27 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Sémaphore]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[On aura besoin de trois sémaphores pour protéger l&#8217;accès aux ressources partagées : coiffeur : pour l&#8217;accès au coiffeur. client : pour l&#8217;accès aux clients. mutex : un sémaphore pour l&#8217;accès en exclusion mutuelle sur la variable partagée NbClientsEnAttente. Exemple d&#8217;algorithme pour le problème du coiffeur fatigué : initialisations : sémaphore présence_client = 0 ; // le coiffeur dort au début; il est fatigué! sémaphore coiffeur = 1 ; // pas de clients au début. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>On aura besoin de trois sémaphores pour protéger l&rsquo;accès aux ressources partagées :<br />
coiffeur : pour l&rsquo;accès au coiffeur.<br />
client : pour l&rsquo;accès aux clients.<br />
mutex : un sémaphore pour l&rsquo;accès en exclusion mutuelle sur la variable partagée NbClientsEnAttente.</p>
<p><strong>Exemple d&rsquo;algorithme pour le problème du coiffeur fatigué :<br />
</strong><br />
<strong>initialisations :</strong><br />
sémaphore présence_client = 0 ; // le coiffeur dort au début; <strong>il est fatigué!</strong><br />
sémaphore coiffeur = 1 ; // pas de clients au début. Le coiffeur est disponible de suite.<br />
<strong>                    Mais attention, il va falloir le réveiller! </strong><br />
sémaphore mutex = 1 ; // la variable NbClientsEnAttente est accesssible<br />
entier NbClientsEnAttente = 0 ; // pas de clients au début</p>
<p><strong>Processus coiffeur :<br />
</strong></p>
<p><code class="codecolorer text default"><span class="text">while (TRUE) {</span></code></p>
<p>//Le coiffeur demande une ressource appelée présence_client.<br />
// Si un client est présent, il doit se réveiller. Sinon il poursuit sa sieste.</p>
<p><code class="codecolorer text default"><span class="text">P(présence_client) ;</span></code></p>
<p>// A ce stade, le coiffeur est réveillé. <strong>Mais dans quel état?!</strong><br />
//On doit accéder la variable NbClientsEnAttente<br />
//Si elle est prise, on attend. Sinon, on la décrémente car le client va quitter son siège //qui devient libre.</p>
<p><code class="codecolorer text default"><span class="text">P(mutex) ;</span></code></p>
<p>// La variable est libérée. On décrémente.</p>
<p><code class="codecolorer text default"><span class="text">NbClientsEnAttente=NbClientsEnAttente-1 ;</span></code></p>
<p>// le coiffeur est prêt à prendre en charge un client de la file d’attente.</p>
<p><code class="codecolorer text default"><span class="text">V(coiffeur) ;</span></code></p>
<p>// Il doit libérer NbClientsEnAttente</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">V(mutex) ; <br />
&nbsp;<br />
Coiffer() ; <br />
&nbsp;<br />
}</div></div>
<p><strong>Processus Client :</strong></p>
<p>//un client qui arrive doit vérifier si tous les sièges sont pris.<br />
// Il doit accéder à NbClientsEnAttente.</p>
<p><code class="codecolorer text default"><span class="text">P(mutex) ;</span></code></p>
<p>//Vérifier s’il y a de la place ou pas.</p>
<p><code class="codecolorer text default"><span class="text">if (NbClientsEnAttente &lt; N) {</span></code></p>
<p>//il y a une place. Le client la prend mais doit incrémenter NbClientsEnAttente.</p>
<p><code class="codecolorer text default"><span class="text">NbClientsEnAttente=NbClientsEnAttente+1 ;</span></code></p>
<p>// Une nouvelle ressource présence_client est disponible pour le coiffeur.<br />
// C’est une manière de signaler votre présence au coiffeur.</p>
<p><code class="codecolorer text default"><span class="text">V(présence_client) ;</span></code></p>
<p>// On doit libérer NbClientsEnAttente</p>
<p><code class="codecolorer text default"><span class="text">V(mutex) ;</span></code></p>
<p>// Le client est pris en compte dans la file d’attente du coiffeur. <strong>Chacun à son tour !</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">P(coiffeur) ; <br />
&nbsp;<br />
} <br />
&nbsp; &nbsp; <br />
Else &nbsp;{</div></div>
<p>// Tous les sièges sont occupés. Le client libère NbClientsEnAttente</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">V(mutex) ;</div></div>
<p>//Le client s&rsquo;en va.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Sortir_client() ; <br />
&nbsp;<br />
} <br />
}</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enoncé : Le coiffeur fatigué</title>
		<link>https://blog.developpez.com/comprendre/p10048/programmation-concurrente/semaphore/enonce_le_coiffeur_fatigue</link>
		<comments>https://blog.developpez.com/comprendre/p10048/programmation-concurrente/semaphore/enonce_le_coiffeur_fatigue#comments</comments>
		<pubDate>Sun, 12 Jun 2011 15:46:37 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Sémaphore]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans un salon de coiffure, il y a un coiffeur C, un fauteuil F dans lequel se met le client pour être coiffé et N sièges pour attendre. • S&#8217;il n&#8217;a pas de clients, le coiffeur C somnole dans le fauteuil F. • Quand un client arrive et que le coiffeur C dort, il le réveille, C se lève. Le client s&#8217;assied dans F et se fait coiffer. • Si un client arrive pendant que [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans un salon de coiffure, il y a un coiffeur C, un fauteuil F dans lequel se met le client pour être coiffé et N sièges pour attendre.<br />
•	S&rsquo;il n&rsquo;a pas de clients, le coiffeur C somnole dans le fauteuil F.<br />
•	Quand un client arrive et que le coiffeur C dort, il le réveille, C se lève. Le client s&rsquo;assied dans F et se fait coiffer.<br />
•	Si un client arrive pendant que le coiffeur travaille :<br />
o	 si un des N sièges est libre, il s&rsquo;assied et attend,<br />
o	 sinon il ressort.<br />
A l’aide de sémaphores, proposez un algorithme permettant de synchroniser les activités du coiffeur et de ses clients.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enoncé : Des babouins intelligents</title>
		<link>https://blog.developpez.com/comprendre/p10046/programmation-concurrente/semaphore/enonce_des_babouins_intelligents</link>
		<comments>https://blog.developpez.com/comprendre/p10046/programmation-concurrente/semaphore/enonce_des_babouins_intelligents#comments</comments>
		<pubDate>Sat, 11 Jun 2011 22:12:14 +0000</pubDate>
		<dc:creator><![CDATA[wafiwafi]]></dc:creator>
				<category><![CDATA[Sémaphore]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Un étudiant qui se spécialise en anthropologie et accessoirement en informatique s’est embarqué dans un projet de recherche pour voir s’il était possible d’enseigner les interblocages aux babouins d’Afrique. Il repère un profond canyon et y jette une corde au travers, de sorte que les babouins puissent le traverser à bout de bras. Plusieurs babouins peuvent traverser en même temps, pourvu qu’ils aillent tous dans la même direction. Si des babouins qui se dirigent vers [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Un étudiant qui se spécialise en anthropologie et accessoirement en informatique s’est embarqué dans un projet de recherche pour voir s’il était possible d’enseigner les interblocages aux babouins d’Afrique. Il repère un profond canyon et y jette une corde au travers, de sorte que les babouins puissent le traverser à bout de bras. Plusieurs babouins peuvent traverser en même temps, pourvu qu’ils aillent tous dans la même direction. Si des babouins qui se dirigent vers l’est et d’autres vers l’ouest se trouvent sur la corde au même moment, cela conduit à un interblocage(les babouins sont bloqués au point de rencontre sur la corde) : en effet, ils n’ont pas la possibilité de passer les uns par-dessus les autres alors qu’ils sont suspendus au-dessus du canyon. Si un babouin souhaite traverser le canyon, il doit vérifier qu’aucun autre babouin ne traverse en sens inverse.<br />
1. Au moyen de sémaphores, écrivez un programme pour éviter l’interblocage. Ne traitez pas le cas d’un groupe infini de babouins se déplaçant d’un côté et interdisant tout passage à ceux qui se déplacent vers l’autre côté.<br />
2. Reprenez la question précédente, mais en évitant la privation de ressources (famine). Lorsqu’un babouin qui souhaite traverser le canyon vers l’est arrive à la corde et trouve un babouin qui traverse vers l’ouest, il attend jusqu’à ce que la corde soit vide, mais aucun babouin se déplaçant vers l’ouest n’est autorisé à démarrer jusqu’à ce qu’au moins un babouin ait traversé dans l’autre sens.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
