Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
BOOX Go 6 Gen II porta per la prima volta il supporto allo stilo su un e-reader da 6 pollici, affiancando 3 GB di RAM al collaudato Snapdragon 665 e un design rivisto con scocca posteriore a costolature. Su carta la proposta è interessante, ma Android 11 fuori supporto, l'assenza di un alloggiamento per il pennino e un'autonomia ridotta rispetto agli e-reader tradizionali sono i compromessi da accettare
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro
Lenovo Idea Tab Plus prova a portare un display da 12,1 pollici 2.5K, quattro speaker Dolby Atmos e una batteria da 10.200 mAh sotto la soglia psicologica dei 300 euro, penna inclusa. Lo abbiamo usato per oltre una settimana per capire dove l'azienda ha tagliato e dove invece ha tenuto il punto
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea
L'euro digitale è una valuta fiat che entrerà in vigore nei prossimi anni. L'obiettivo principale è quello di ridurre la dipendenza dalle piattaforme di pagamento digitali statunitensi e offrire ai cittadini un modo semplice per trasferire denaro. Anche offline, anche in maniera (pseudo)anonima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-07-2013, 15:59   #1
droghiere
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 21
[C], sistemi operativi: fork, memoria condivisa e semafori

ciao a tutti, devo fare un esercizio di sistemi operativi. questa più o meno è la consegna:

da riga di comando si hanno n figli (argv[1]) che lavorano su una variabile m(argv[0]).
il padre genera i n figli e crea il segmento di memoria condivisa. poi aspetta che i figli terminino l'operazione.
i figli lavorano con un semaforo per modificare la variabile m che dev'essere scritta nella memoria condivisa.
quando i figli terminano, il padre stampa il valore della variabile contenuta nella memoria condivisa


questo è il mio codice:

Codice:
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
#include <sys/stat.h>


int m; //mia variabile condivisa

int main(int argc, char *argv[])
{
	int segment_id;
	int j;
	int size = 4096;
	sem_t *sem;
	char *shared_memory;
	pid_t pid;

/* costruisce un segmento condiviso – padre e figlio condivideranno "sid" */
	segment_id = shmget( IPC_PRIVATE, size, S_IRUSR | S_IWUSR );

	if ( segment_id < 0 ) { // DEBUG
	printf("shared memory initilization failed\n");
	return 1;
	}

/* inizializza il semaforo */
	sem = sem_init(&sem, 0, 1 );
	
	if ( !sem ) { // DEBUG
		printf("error semaphore initilization\n");
		return 1;
	}

/* il padre attacca il segmento al suo spazio di indirizzi */
	shared_memory = (char *)shmat( segment_id, NULL, 0 );

/* inizializzo m */
	m = atoi(argv[0]);

	for (int x=0;x<atoi(argv[1]);x++){  // creo n figli (n = atoi(argv[1]))
		pid = fork();

		if ( pid < 0 ) { // DEBUG
			printf("fork failed\n");
			return 1;
		}
	}

	if (pid>0)  // PADRE
		wait(NULL); // aspetta figli
                printf("valore: %s\n", m); //stampa il valore finale della variabile


/* il figlio deve attacca il segmento al *suo* spazio di indirizzi */
	if ( pid == 0 ) {
		shared_memory = (char *)shmat( segment_id, NULL, 0 );

	        do {
		        sem_wait( sema ); /* entro nella sezione critica */
		
		        if (m%2 != 0)   //modifica variabile
			        m*=2;
		        else
			        m-=1;

		// memorizzo il valore di m nella memoria
		        sprintf(shared_memory, m);

		        sem_post( sema ); /* esco dalla sezione critica */
	         } while(1);
        }



/* padre e figlio scollegano il segmento */
	shmdt(shared_memory);

/* il padre rimuove il semaforo ed il segmento */
	if ( pid > 0 ) {
		sem_delete(&sem);
		shmctl(segment_id, IPC_RMID, 0 );
	}

	return 0;
}
ora, i miei dubbi riguardano sostanzialmente il come dichiarare la variabile m e come far sì che essa sia memorizzata nella memoria condivisa. è giusto come l'ho scritto io?

grazie,

D.
droghiere è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea Oltre il contante e le crypto: tutto sull'Euro D...
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Z.AI avvia un data center da 1 gigawatt....
Microsoft e Mistral annunciano un accord...
Grazie al Very Large Telescope potrebbe ...
Sony FX5: RAW interno X-OCN e Open Gate ...
AMD e Anthropic, affare fatto: 5 miliard...
Cyber Arena Tour 2026, WINDTRE BUSINESS ...
Wistron ha aperto il primo stabilimento ...
"Così è facile perder...
Peak Design ripensa la staffa a L: il tr...
Samsung: ufficiale la serie Galaxy Z Fol...
Galaxy Watch Ultra2 e Watch9 ufficiali: ...
Un razzo spaziale Falcon 9 ha lanciato l...
Microlino: dal rischio di fallimento all...
SpaceX, uno stadio di Falcon 9 si schian...
Gli agenti di OpenAI a 10 milioni di ute...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v