|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
[c++]semafori
volevo fare una prova per usare i semafori e ho creato questo programma:
non fà altro che usare due 3d: uno legge da din i dati e l'altro li somma e li manda a schermo. compilando questo programma con g++ -l pthread mi chiede la prima volta i dati, poi continua a sommare all'infinito, come se il semaforo non si decrementasse con sem_wait e risultasse quindi sempre positivo dove è l'errore??? grazie mille ciao Codice:
#include <pthread.h>
#include <iostream.h>
#include <semaphore.h>
#include <malloc.h>
struct dati{
int primo;
int secondo;
struct dati* next;
};
struct dati* dati_operazione;
pthread_mutex_t mutex_coda=PTHREAD_MUTEX_INITIALIZER;
sem_t coda;
void inizializzazione_coda(){
dati_operazione = NULL;
sem_init(&coda, 0, 0);
}
void* funzione_thread1(void* args){
int a;
int b;
int somma;
int contatore;
contatore = 0;
struct dati* lavoro;
while(1){
sem_wait(&coda);
pthread_mutex_lock(&mutex_coda);
lavoro = dati_operazione;
dati_operazione = dati_operazione->next;
pthread_mutex_unlock(&mutex_coda);
a = lavoro->primo;
b = lavoro->secondo;
somma = a + b;
cout << "la somma è" <<somma << "\n";
contatore ++;
cout << contatore;
}
}
void* aggiunta_coda(void* args){
int c;
int d;
cout <<"primo: ";
cin >> c;
cout << "\n" <<"secondo: ";
cin >> d;
struct dati* nuovo_lavoro;
nuovo_lavoro = (struct dati*) malloc(sizeof(struct dati));
while(1){
nuovo_lavoro->primo = c;
nuovo_lavoro->secondo = d;
pthread_mutex_lock(&mutex_coda);
nuovo_lavoro->next = dati_operazione;
dati_operazione = nuovo_lavoro;
sem_post(&coda);
pthread_mutex_unlock(&mutex_coda);
}
}
int main(){
pthread_t thread;
pthread_t thread1;
inizializzazione_coda();
pthread_create(&thread , NULL , funzione_thread1 , NULL);
pthread_create(&thread1, NULL ,aggiunta_coda , NULL);
pthread_join(thread , NULL);
pthread_join(thread1 , NULL);
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
piattaforma slack 9.1
g++ e gcc in versione 3.2.3 ciao |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
piattaforma slack 9.1
g++ e gcc in versione 3.2.3 altra domanda: il manuale che stò leggendo parla solo di GNU/Linux, i sorgenti vanno bene anche con i sistemi unix o le librerie sono diverse? ciao |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
uh! la modifica ha creato un'altro post????
cmq questo è anche un uppino! (oltfre che una segnalazione di bug ciao |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
ultimo up disperato!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:17.



















