Search Header Logo
Semafori standard Posix1.b

Semafori standard Posix1.b

Assessment

Presentation

Computers

11th Grade

Medium

Created by

Emanuela Giaconi

Used 2+ times

FREE Resource

15 Slides • 10 Questions

1

Semafori standard Posix1.b

By Emanuela Giaconi

2

Semafori in C - Posix1.b

  • Sono una particolare implementazione dei semafori.

  • ​Possono svolgere il ruolo di semafori binari o generali n-ari (Dijkstra) a seconda di quale valore viene loro assegnato all'atto della inizializzazione

Semafori in Posix1.b

3

Open Ended

Ripassiamo insieme i vari tipi di semafori ... quali tipi di semafori conosci?

4

Semafori in C - Posix1.b

Semafori named

  • Permettono di sincronizzare processi anche non imparentati, oltre ai thread.

  • Identificati da un percorso

  • Si inizializzano con sem_open

  • Persistenti e Visibili in tutto il sistema.​

Semafori in Posix1.b

5

Semafori in C - Posix1.b

Semafori unnamed

  • Permettono di sincronizzare processi imparentati e thread.

  • Condivisi tra thread o tra processi

  • Si inizializzano con sem_init

  • I Semafori sono una variable di tipo sem_t

  • Occorre includere la libreria semaphore.h

  • OPERANO IN MUTUA ESCLUSIONE, in particolare nell'accesso al contatore che contengono

Semafori in Posix1.b

6

Open Ended

Descrivi i semafori di Dijkstra e le relative primitive P() e V()

7

Inizializzazione semaforo unnamed

#include <semaphore.h>

​int sem_init (sem_t *sem, int pshared, unsigned value);​

​es. sem_init(&nomeSemaforo, 0, valoreIniziale)

  • inizializza un unnamed semaphore sem

  • Restituisce 0 in caso tutto vada bene e -1 in caso di fallimento, nel qual caso setta errno

  • pshared assume valore 0: solo i threads del processo che li crea puo' usare il semaforo, e non-0: altri processi possono usare il semaforo

  • value: valore iniziale del semaforo

Semafori in Posix1.b

8

P() su semaforo unnamed: sem_wait

#include <semaphore.h>

int sem_wait(sem_t *sem);

es. sem_wait(&nomeSemaforo);​​

Blocca il thread sul semaforo

  1. controlla il valore del semaforo

  2. se il valore e' minore o uguale a zero si blocca e riparte uscendo dalla wait quando diventa uguale a zero, poi decrementa il valore del semaforo

  3. se il valore e' maggiore di zero prosegue uscendo subito dalla waitp, poi decrementa il valore del semaforo.

Semafori in Posix1.b

9

P() su semaforo unnamed: sem_wait

#include <semaphore.h>

int sem_wait(sem_t *sem);

Restituisce

  • 0 in caso di successo

  • -1 in caso di errore, setta errno (== EINTR se interrotto da un segnale)

Parametri sem: Target semaphore

  • sem > 1: decrementa e basta

  • sem == 1: decrementa e blocca altri thread (thread acquires lock)

  • sem <= 0: si blocca e quando viene sbloccato decrementa (thread blocks)

Semafori in Posix1.b

10

V() su semaforo unnamed: sem_post

#include <semaphore.h>

int sem_post(sem_t *sem);

es. sem_post(&nomeSemaforo);

​Sblocca il seaforo, cioe'

  • Incrementa di 1 il valore del semaforo

  • Se il valore diventa > 0 qualche altro thread bloccato sulla sem_wait puo' continuare l'esecuzione

Restituisce

  • 0 in caso di successo

  • -1 in caso di errore e setta errno​

Semafori in Posix1.b

11

Esempio Produttore - Consumatore

Semafori in Posix1.b

media

12

Esempio Produttore - Consumatore

Un produttore e un consumatore si alternano per un numero di VOLTE nella scrittura/prelievo di un dato in un buffer

Semafori in Posix1.b

media
media

13

Esempio Produttore - Consumatore

media
media

14

Esempio Produttore - Consumatore

media
media

15

Multiple Choice

Permettono di sincronizzare processi anche non imparentati, oltre ai thread

1

Semafori named

2

Semafori unnamed

16

Multiple Choice

Si inizializzano con sem_init

1

Semafori named

2

Semafori unnamed

17

Multiple Choice

Persistenti e Visibili in tutto il sistema.​

1

Semafori named

2

Semafori unnamed

18

Multiple Choice

Sono variabili di tipo sem_t

1

Semafori named

2

Semafori unnamed

19

Multiple Choice

Inizializzazione di un semaforo standard posix1.b

1

sem_init(...)

2

pthread_mutex_init(...)

3

inizializza(...)

4

start(...)

20

Multiple Choice

​int sem_init (sem_t *sem, int pshared, unsigned value);​

1

pshared valore iniziale del semaforo

2

inizializza un named semaphore sem

3

Restituisce 0 in caso tutto vada bene

4

restituisce -2 in caso di fallimento

21

Multiple Choice

P() su semaforo unnamed

1

sem_wait()

2

sem_post()

3

sem_init()

4

sem_trywait()

22

Multiple Choice

V() su semaforo unnamed

1

sem_wait()

2

sem_post()

3

sem_init()

4

sem_trywait()

23

P() non bloccante: sem_trywait

#include <semaphore.h>

int sem_trywait(sem_t *sem);

tenta di acquisire il semaforo ma continua la sua esecuzione se questo è rosso

Semafori in Posix1.b

24

Controllo di semaforo unnamed

#include <semaphore.h>

int sem_getvalue (sem_t sem, int sem_val);

Il valore del semaforo viene ritornato nella variabile *sem_val

Semafori in Posix1.b

25

Distruzione di semaforo unnamed

#include <semaphore.h>

int sem_destroy (sem_t sem);

Il semaforo viene distrutto

Semafori in Posix1.b

Semafori standard Posix1.b

By Emanuela Giaconi

Show answer

Auto Play

Slide 1 / 25

SLIDE

Discover more resources for Computers