
Semafori standard Posix1.b
Presentation
•
Computers
•
11th Grade
•
Medium
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
controlla il valore del semaforo
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
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
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
13
Esempio Produttore - Consumatore
14
Esempio Produttore - Consumatore
15
Multiple Choice
Permettono di sincronizzare processi anche non imparentati, oltre ai thread
Semafori named
Semafori unnamed
16
Multiple Choice
Si inizializzano con sem_init
Semafori named
Semafori unnamed
17
Multiple Choice
Persistenti e Visibili in tutto il sistema.
Semafori named
Semafori unnamed
18
Multiple Choice
Sono variabili di tipo sem_t
Semafori named
Semafori unnamed
19
Multiple Choice
Inizializzazione di un semaforo standard posix1.b
sem_init(...)
pthread_mutex_init(...)
inizializza(...)
start(...)
20
Multiple Choice
int sem_init (sem_t *sem, int pshared, unsigned value);
pshared valore iniziale del semaforo
inizializza un named semaphore sem
Restituisce 0 in caso tutto vada bene
restituisce -2 in caso di fallimento
21
Multiple Choice
P() su semaforo unnamed
sem_wait()
sem_post()
sem_init()
sem_trywait()
22
Multiple Choice
V() su semaforo unnamed
sem_wait()
sem_post()
sem_init()
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
Similar Resources on Wayground
20 questions
3ª SÉRIE
Presentation
•
12th Grade
21 questions
3ª Série - Avaliação
Presentation
•
12th Grade
18 questions
Fede e scienza
Presentation
•
12th Grade
20 questions
Revolução Inglesa
Presentation
•
11th Grade
20 questions
Ripasso limiti e punti di discontinuità
Presentation
•
11th Grade
18 questions
Geometria de Posição
Presentation
•
11th Grade
17 questions
Efeito estufa
Presentation
•
11th Grade
20 questions
Introdução à estatística
Presentation
•
10th Grade
Popular Resources on Wayground
24 questions
PBIS-HGMS Day 10
Quiz
•
6th - 8th Grade
10 questions
HCS SCI 03 Summer School Review 3
Quiz
•
3rd Grade
11 questions
Home Scope
Quiz
•
7th - 8th Grade
15 questions
HCS SCI 05 Summer School Assessment 3 Review
Quiz
•
5th Grade
35 questions
Lufkin Road Middle School Student Handbook & Policies Assessment
Quiz
•
7th Grade
18 questions
Geo 11.3 Area of Circles and Sectors
Quiz
•
9th - 11th Grade