Concetti Chiave

  • Il codice include librerie essenziali per la gestione di semafori in ambiente Unix, come sys/ipc.h e sys/sem.h.
  • Un semaforo è creato utilizzando la funzione semget con un identificatore chiave definito da #define SEM_NUMBER 2012.
  • La funzione semctl è utilizzata per impostare il valore iniziale del semaforo a 0, con il comando SETVAL.
  • In caso di errore durante l'inizializzazione o l'impostazione del semaforo, il programma stampa messaggi di errore dettagliati e termina con un codice di uscita di 1.
  • Il codice utilizza una struttura union semun per passare i parametri necessari alla chiamata della funzione semctl.

Inizializzazione del semaforo

#include

#include

#include

#include

/* IDENTIFICATORE DEL SEMAFORO */

#define SEM_NUMBER 2012

int main()

{

int id;

union semun {

int val;

struct semid_ds *buf;

ushort * array;

} argument;

argument.val = 0;

/* int semget(SEM_NUMBER_t SEM_NUMBER, int nsems, int semflg); */

/* CREATO 1 SEMAFORO CON CHIAVE SEM_NUMBER */

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

if(id

{

fprintf(stderr, "Impossibile attivare il semaforo.\n");

return 1;

}

/* int semctl(int semid, int semnum, int cmd, ...); */

if( semctl(id, 0, SETVAL, argument)

{

fprintf( stderr, "Impossibile settare il valore 0 nel semaforo.\n");

}

else

{

fprintf(stderr, "Semaforo %d inizializzato.\n", SEM_NUMBER);

}

return 0;

}

Domande da interrogazione

  1. Come viene creato un semaforo nel codice fornito?
  2. Un semaforo viene creato utilizzando la funzione `semget`, che richiede un identificatore di chiave (in questo caso `SEM_NUMBER`), il numero di semafori da creare (1) e i flag di accesso (0666 | IPC_CREAT). Se la creazione fallisce, viene stampato un messaggio di errore.

  3. Qual è il valore iniziale impostato per il semaforo?
  4. Il valore iniziale del semaforo è impostato a 0 tramite la funzione `semctl`, utilizzando il comando `SETVAL`. Se l'operazione ha successo, viene confermato che il semaforo è stato inizializzato.

  5. Cosa succede se la creazione del semaforo fallisce?
  6. Se la creazione del semaforo fallisce, il programma stampa un messaggio di errore "Impossibile attivare il semaforo." e termina restituendo 1.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community