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 28-11-2006, 16:35   #1
andrea
Senior Member
 
L'Avatar di andrea
 
Iscritto dal: Jul 1999
Città: Roma
Messaggi: 614
[c-linux]Problema sui semafori

Dovevo fare un semplicissimo programma in cui un processo padre doveva creare un semaforo e per 10 volte oggi 3 secondi doveva incrementarlo di 1, mentre il figlio doveva decrementare di uno il semaforo, e dirmi se l'operazione era andata a buon fine o meno.

Quindi mi aspetterei un output del tipo:

Incrementato semaforo
Figlio decrementa il semaforo
Figlio non puo' decrementare
Incrementato semaforo

Io ho provato a scrivere questo:

Codice:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

#define KEY (1000)

int main (void) {

	int id,n=0;
	pid_t pid;
	union semun {
		int val;
		struct semid_ds *buf;
		ushort * array;
	} argument;

	argument.val = 0;

	id = semget(KEY, 1, 0666 | IPC_CREAT);

	if(id < 0) {
   	   fprintf(stderr, "Non ottengo il semaforo.\n");
   	   exit(0);
   	}

	if( semctl(id, 0, SETVAL, argument) < 0) {
   	   fprintf( stderr, "Non setto il semaforo.\n");
   	}
   	else {
   	   fprintf(stderr, "Semaforo %d inizializzato.\n", KEY);
   	}

	pid = fork();
	if ( pid < 0) {
                printf ("Errore figlio non creato \n");
		exit (-1);
        }
        if ( pid == 0) {       /* Child */
                printf ("Figlio %d creato con successo \n" ,getpid() );
		int idsem;  /* Identificatore del semaforo */
   		struct sembuf operations[1];
		int retval; /* Valore di ritorno di semop() */

  		operations[0].sem_num = 0;
   		operations[0].sem_op = -1;
    		operations[0].sem_flg = 0;

		idsem = semget(1000, 1, 0666);
   		if(id < 0) {	/* Se il semaforo non esiste */
   			fprintf(stderr, "Non trovo il semaforo, esco.\n");
      			exit(0);
   		}

		while(1) {

       			retval = semop(id, operations, 1);

   			if(retval == 0) {
       				printf("Processo figlio con id %d ha consumato una risorsa\n", getpid());
    			}
    			else {
    			   printf("Processo figlio con id %d non ha ottenuto una risorsa\n", getpid());
    			}
			sleep(1);
		}
                exit (0);
        }
	else {
	   struct sembuf operations[1];
	   int retval; /* Valore di ritorno di semop() */
	   operations[0].sem_num = 0;
	   operations[0].sem_op = 1;
	   operations[0].sem_flg = 0;	    

	   while(n != 10) {
		   sleep(3);
		   retval = semop(id, operations, 1);

	    	   if(retval == 0) {
	        	printf("E' stato incrementato il semaforo.\n");
	    	    }
	    	   else {
	       		printf("Non si e' riuscito ad incrementare il semaforo.\n");
			perror("REASON");
	    	   }
		   n++;
		}
	kill(pid,SIGKILL);
	}	

	return 0;
}
Il problema è che l'output e' di questo tipo:

E' stato incrementato il semaforo.
Processo figlio con id 2613 ha consumato una risorsa
E' stato incrementato il semaforo.
Processo figlio con id 2613 ha consumato una risorsa

E cosi via, secondo voi dove e' il problema?Puo' darsi che sia un "problema" di scheduler?

Grazie
__________________
...What you know that you time is close at hand, maybe then you'll begin to understand, life down there is just a strange illusion.
andrea è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2006, 21:28   #2
andrea
Senior Member
 
L'Avatar di andrea
 
Iscritto dal: Jul 1999
Città: Roma
Messaggi: 614
nessuno qualche ideina?
__________________
...What you know that you time is close at hand, maybe then you'll begin to understand, life down there is just a strange illusion.
andrea è offline   Rispondi citando il messaggio o parte di esso
Old 30-11-2006, 08:32   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Il comportamento è in linea con il codice che hai scritto.
Un decremento tramite semop blocca se il semaforo non è >0. Se vuoi un comportamento non bloccante, metti IPC_NOWAIT nel sem_flg del child.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 30-11-2006, 09:28   #4
andrea
Senior Member
 
L'Avatar di andrea
 
Iscritto dal: Jul 1999
Città: Roma
Messaggi: 614
E il bello che c'era anche scritto sul man, che pirla che sono
Ti ringrazio.
__________________
...What you know that you time is close at hand, maybe then you'll begin to understand, life down there is just a strange illusion.
andrea è 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...
NVIDIA RTX Spark: chi saranno i primi br...
Collabora Online 26.04 porta l'IA nella ...
Google multata dall'UE per 890 milioni d...
Scopa elettrica MOVA G70 Complete a 199€...
Colonnine elettriche in Italia: record d...
Hyundai, operai in rivolta ma l'azienda ...
Comprare vecchi libri per distruggerli: ...
Perde la testa e continua a tirare pugni...
Nessuna ulteriore proroga ESU per Exchan...
Samsung integra l'IA on device con Gemin...
L'IA ammazza le vendite dei mainframe, m...
Ritorno al vintage con Kodak EC35: la nu...
StoryKit, l'app di Meta che genera fiabe...
Allarme SharePoint: una falla critica es...
HMD potrebbe riportare in vita i Lumia c...
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: 13:55.


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