-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMemo
90 lines (54 loc) · 2.5 KB
/
Memo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
- LinuxThreads
Inclusione del file header pthread.h
Rappresentazione come pthread_t tid
Compilazione con: gcc -D_REENTRANT -o prog prog.c -lpthread
* Creazione Thread
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void * arg);
- thread - puntatore che raccoglierà il thread_id
- attr - utilizzato per specificare eventuali attributi (solitamente NULL)
- start_routine - puntatore alla funzione che contiene il codice da eseguire
- arg - vettore contenente paramentri da passare alla funzione
Ritorna 0 in caso di successo, != 0 altrimenti.
* Terminazione di Thread
void pthread_exit(void *retval);
- retval - puntatore al valore di ritorno (ottenibile nel main da pthread_join)
* Sincronizzazione con la terminazione
int pthread_join(pthread_t th, void **thread_return);
- th - tid del thread da attendere
- thread_return - viene memorizzato qui il valore di ritorno del thread
Se il ritorno è != 0 allora è fallita.
-------------------------------------------------------------------------------
- Semafori Binari (mutex)
Rappresentazione come pthread_mutex_t mux
Utilizzati per semafori di mutua esclusione
Semafori il cui valore può essere:
- 0 - Semaforo occupato
- 1 - Semaforo libero
* Inizializzazione
int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr);
- mutex - individia il mutex da inizializzare
- attr - Eventuali attributi, usualmente NULL (semaforo libero)
* Lock/Unlock
int pthread_mutex_lock(pthread_mutex_t* mux);
int pthread_mutex_unlock(pthread_mutex_t* mux);
- mux - Semaforo di riferimento
Da inserire a inizio e fine della sezione critica
-------------------------------------------------------------------------------
- Semafori
Libreria semaphore.h
Rappresentazione come static sem_t my_sem
* Inizializzazione
int sem_init(sem_t *sem, int pshared, unsigned int value);
- sem - Individua il semaforo da inizializzare
- pshared - 0 se il semaforo non è condiviso tra task (sempre 0)
- value - valore iniziale del semaforo
* Operazione P
int sem_wait(sem_t *sem);
- sem - Semaforo sul quale operare
Se il valore del semaforo e` uguale a zero, sospende il thread chiamante nella
coda associata al semaforo; altrimenti ne decrementa il valore.
* Operazione V
int sem_post(sem_t *sem);
- sem - Semaforo sul quale operare
Se c'e` almeno un thread sospeso nella coda associata al semaforo sem, viene
risvegliato; altrimenti il valore del semaforo viene incrementato.