
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
17 questions
Química Verde
Presentation
•
11th Grade
17 questions
Research Paper Plagiarism/Finding Sources
Presentation
•
12th Grade
19 questions
Energia e Movimentos 3
Presentation
•
10th Grade
16 questions
O conto da ilha desconhecida
Presentation
•
11th Grade
20 questions
ELETRICIDADE ANIMADA E INTERATIVA - SEGUNDA PARTE
Presentation
•
12th Grade
18 questions
The Great Gatsby Chapters 1-3
Presentation
•
11th Grade
21 questions
Writing Feedback (Tiger Parents)
Presentation
•
11th Grade
21 questions
ILUMINISMO REVOLUÇÃO AMERICANA
Presentation
•
11th Grade
Popular Resources on Wayground
6 questions
PRIDE Always and Everywhere
Presentation
•
12th Grade
20 questions
Lab Safety Quiz
Quiz
•
6th Grade
26 questions
KOR Review Kahoot Questions
Quiz
•
8th Grade
21 questions
Continents and Oceans
Quiz
•
6th Grade
12 questions
Unit Zero lesson 2 cafeteria
Presentation
•
9th - 12th Grade
20 questions
Parts of Speech
Quiz
•
5th Grade
10 questions
Riddles Riddles fun Riddles
Quiz
•
6th - 12th Grade
16 questions
Subject & Predicate
Quiz
•
5th Grade