Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/02/2006, à 17:51

Xtatic

Un coup de main sur un petit programme ?

Bonjour,
J'ai testé un programme utilisant des threads sur mon portable mais je n'obtiens pas le résultats escompté. Si quelqu'un sous Ubuntu voudrait bien le compiler et l'essayter,  je lui en serait trés reconnaissant wink

Voila mon programme (qui fonctionne sous KDE) :

#include<stdio.h>
#include<pthread.h>
#include <semaphore.h>
#include<unistd.h>

#define MAX 100

sem_t mutex, vide, plein;
char tampon[MAX];
pthread_t tid[2];

void* proc(void* i);

int main()
{
	int i;
	
	sem_init(&mutex, 0, 1);
	sem_init(&vide, 0, MAX);
	sem_init(&plein, 0, 0);
	
	for(i = 0; i<2; i++)
		pthread_create(tid + i , NULL , (void*(*)())proc, (void *)i);
	pthread_join(tid[0], (void *)i);
	pthread_join(tid[1], (void *)i);
	return 0;
}
	
void* proc(void* i)
{
	int rep;
	int posLecteur, posEcrivain;
	posLecteur = 0;
	posEcrivain = 0;
	
	if(i==0) { // Lecteur
		do{
			sem_wait(&plein);
			sem_wait(&mutex);
			rep = write(STDOUT_FILENO, &tampon[posLecteur], 1);
			posLecteur = (posLecteur + 1) % MAX;
			sem_post(&mutex);
			sem_post(&vide);
			
		}while(rep != 0);
		
	}else{ //Ecrivain
		do{
			sem_wait(&vide);
			sem_wait(&mutex);
			rep = read(STDIN_FILENO, &tampon[posEcrivain], 1);
			posEcrivain = (posEcrivain + 1) % MAX;
			sem_post(&mutex);
			sem_post(&plein);
			
		}while(rep!=0);
		
	}
	
	return NULL;
}

Normalement , une fois executé, lorsqu'on tape des caractères, ceux ci doivent etre réenvoyé à l'écran.
Mais lorsque je le compile sur mon portable (sous ubuntu) rien n'est renvoyé.

Pour compiler, je tape : gcc -lpthread -o executable le_nom_du_fichier_source.c

et avec un -Wall, je n'obtiens aucun warnings.

Je crains que le paquets build essential et ses dépendances que j'ai téléchargés ne sont pas entièrements bon (j'ai telechargé des paquets pour une distrib debian, et non spécifiquement ubuntu) .

Merci de l'aide que vous pourrez m'apporter.

Dernière modification par Xtatic (Le 10/02/2006, à 17:58)

Hors ligne

#2 Le 10/02/2006, à 23:44

Sacre

Re : Un coup de main sur un petit programme ?

Je l'ai compilé sur ma Ubuntu (avec les build-essential d'Ubuntu et gcc 4)

Quand je tappe des caractères, ils sont effectivement affiché dans ma console. Donc ton programme à l'air de fonctionner smile

Hors ligne

#3 Le 11/02/2006, à 00:35

Xtatic

Re : Un coup de main sur un petit programme ?

Merci.
Bon, et bien je vais recommencer les telechargements des paquets wink
Je verrai bien ce qui se passera hmm

Hors ligne