So che dichiarare una variabile statica all'interno di una funzione in C significa che la variabile mantiene il suo stato tra le chiamate di funzioni. Nel contesto dei thread, ciò comporterà che la variabile mantenga il suo stato su più thread o che abbia uno stato separato tra ciascun thread?Variabili e filettature statiche (C)
Qui è un passato domanda esame di carta Ho difficoltà a rispondere:
La seguente funzione C è destinato ad essere utilizzato per assegnare identificatori univoci (UID) ai suoi interlocutori:
get_uid()
{
static int i = 0;
return i++;
}
Spiegare in che modo get_uid() potrebbe funzionare in modo errato in un ambiente in cui è chiamato da più thread. Utilizzando uno scenario di esempio specifico, fornire dettagli specifici su su come e perché potrebbe verificarsi un comportamento errato.
Al momento presumo che ogni thread abbia uno stato separato per la variabile, ma non sono sicuro che sia corretto o se la risposta dipenda più dalla mancanza di mutua esclusione. Se questo è il caso, allora come potrebbero essere implementati i semafori in questo esempio?
La tua domanda finale, hai chiesto come si possono * implementare i semafori * in questo esempio. Intendi chiedere come potrebbe essere implementato * usando * semafori? – WhozCraig
Se si utilizza gcc, una bella aggiunta allo standard sono le variabili __thread statiche. Sono variabili statiche, ma locali per ogni thread. Lo trovo particolarmente utile per la gestione delle connessioni thread-locale a un server ... – user1251840