del codice, appesantendo inutilmente il programma. Originariamente questo
comportamento veniva ottenuto con delle macro, ma queste hanno tutta una serie
di problemi di sintassi nel passaggio degli argomenti (si veda ad esempio
-\cite{PratC}) che in questo modo possono essere evitati.
+\cite{PratC}) che in questo modo possono essere evitati.
citato un controllo ed una assegnazione) o comunque eseguire una serie di
istruzioni, l'atomicità non è più possibile.
-In questo caso, se si vuole essere sicuri di non poter essere interrotti da un
-segnale durante l'esecuzione di una sezione di codice, lo si può bloccare
-esplicitamente modificando la maschera dei segnali del processo con la
-funzione di sistema \funcd{sigprocmask}, il cui prototipo è:
+In questo caso, se si vuole essere sicuri di non poter essere interrotti da
+uno o più segnali durante l'esecuzione di una sezione di codice, li si possono
+bloccare esplicitamente modificando la maschera dei segnali del processo
+usando la funzione di sistema \funcd{sigprocmask},\footnote{in realtà quello
+ che viene usato normalmente è il \textit{wrapper} omonimo delle \acr{glibc}
+ dato che con l'introduzione dei segnali \textit{real time} nel kernel 2.2 le
+ dimensioni del tipo \type{sigset\_t} sono cambiate e la \textit{system call}
+ sottostante è diventata \funcm{rt\_sigprocmask} che richiede un quarto
+ argomento di tipo \ctyp{size\_t} per indicare questa dimensione; il
+ \textit{wrapper} maschera questi dettagli ed inoltre ignora in maniera
+ silente i tentativi di bloccare i segnali \textit{real time} impiegati per
+ la gestione dei \textit{thread} dalla \textit{Native Thread Posix Library}
+ (vedi sez.~\ref{sec:linux_ntpl}).} il cui prototipo è:
\begin{funcproto}{
\fhead{signal.h}
dell'argomento \param{how}, secondo le modalità specificate in
tab.~\ref{tab:sig_procmask_how}. Qualora si specifichi un valore non nullo
per \param{oldset} la maschera dei segnali corrente viene salvata a
-quell'indirizzo.
+quell'indirizzo. Se è nullo \param{set} non viene eseguito nessun cambiamento
+e si può usare la funzione per leggere la maschera corrente in \param{oldset}.
\begin{table}[htb]
\footnotesize
\label{tab:sig_procmask_how}
\end{table}
-In questo modo diventa possibile proteggere delle sezioni di codice bloccando
-l'insieme di segnali voluto per poi riabilitarli alla fine della sezione
-critica. La funzione permette di risolvere problemi come quelli mostrati in
-fig.~\ref{fig:sig_event_wrong}, proteggendo la sezione fra il controllo del
-flag e la sua cancellazione. La funzione può essere usata anche all'interno
-di un gestore, ad esempio per riabilitare la consegna del segnale che l'ha
-invocato, in questo caso però occorre ricordare che qualunque modifica alla
-maschera dei segnali viene perduta al ritorno dallo stesso.
+La funzione consente di proteggere delle sezioni di codice bloccando l'insieme
+di segnali voluto per poi riabilitarli alla fine della sezione critica e
+risolvere problemi come quelli mostrati in fig.~\ref{fig:sig_event_wrong},
+proteggendo la sezione fra il controllo del flag e la sua cancellazione. La
+funzione può essere usata anche all'interno di un gestore, ad esempio per
+riabilitare la consegna del segnale che l'ha invocato, in questo caso però
+occorre ricordare che qualunque modifica alla maschera dei segnali viene
+perduta al ritorno dallo stesso.
Benché con l'uso di \func{sigprocmask} si possano risolvere la maggior parte
dei casi di \textit{race condition} restano aperte alcune possibilità legate