Perm(semaphore) et sub

maglo Messages postés 4 Statut Membre -  
maglo Messages postés 4 Statut Membre -
Bonjour a Tous

je debute avec PERL j'essaye de faire tourner deux sub, a tour de role, j'ai cree un Threads pour que les sub ce partage la ressource et tourne chacun son tour, mais lorsque je compile ca marche pas. lA QUESTION QUE JE ME POSE FAUT'il absolument avoir un "main" ou juste des sub suffissent pour faire rouler le programme. Je debute donc merci de votre aide et indulgence.

use threads;

sub jeton {2; }

sub_part1{

sub good_part1{ $thr1 = threads->new(\&jeton);

}

sub_part2{

sub good_part2{ $thr2 = threads->new(\&jeton);

}

3 réponses

Manu
 
Bonjour,

lorsque je compile ca marche pas


Qu'est-ce qui "ne marche pas" ? la compil ou le programme compilé ?

Sinon :
- pour accéder à une ressource "chacun son tour", il ne faut pas faire de threads, parce qu'une thread peut prendre la ressource deux fois de suite, et même plus,... sauf si on gère le tour de rôle, mais avec une thread c'est tellement plus facile.
- le programme se termine quand le main se termine, donc si le main n'attend pas la fin des threads qu'il a lancés, ceux-ci sont "tués" même s'ils n'ont pas eu le temps de travailler.

Manu
0
Manu
 
Bonjour,

Je vois que vous avez lancé un deuxième thread plus explicite sur votre problème....

Ce qui vous manque c'est un contrôle d'accès à votre ressource. Il faut poser un verrou en entrant et déverrouiller en sortant. Sous Linux, on utilise souvent un fichier à cette fin : si le fichier existe c'est que la ressource est occupée, et il faut alors attendre qu'il ait été supprimé.

Manu
0
maglo Messages postés 4 Statut Membre
 
merci pour ta reponse Manu
en effet j'essaye de gere un tour de role justement, en fait ca ne marche pas car chaque fois qu'un sub a le thread il est censé incrementé un compteur (competeur qui est imprimer dans un fichier). sauf que ce compteur reste a 0.

$thr2 = threads->new(\&jeton, print OUTFILE (compteur[$t+1]=compteur[$t+1] + 1));
0