Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Note 15 Pro+: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-11-2006, 17: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, 22: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, 09: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, 10: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


Redmi Note 15 Pro+: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+: autonomia monstre e display ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Il razzo spaziale NASA SLS e la capsula ...
Samsung Galaxy S26 Ultra: quattro colora...
AWS investe 1,2 miliardi in Italia. Coin...
La navicella cinese Shenzhou-20 con il f...
I piani Business ed Education di Google ...
Ceres-2 e Lunga Marcia 3B: la Cina falli...
Motorola edge 70 appena uscito e già in ...
ARC Raiders non si accontenta: nel 2026 ...
Germania, bonus per le auto elettriche d...
Nella causa OpenAI, Elon Musk rivendica...
DJI Osmo 360 in offerta su Amazon: video...
Canada: raggiunto accordo con la Cina, c...
500 terabyte di libri pirata per addestr...
Mandiant le pubblica rainbow table Net-N...
Robot aspirapolvere top di gamma al mini...
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:34.


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