All'inizio di FORTRAN e BASIC, essenzialmente tutti i programmi erano scritti con istruzioni GOTO. Il risultato è stato il codice spaghetti e la soluzione è stata la programmazione strutturata.
Allo stesso modo, i puntatori possono avere caratteristiche difficili da controllare nei nostri programmi. Il C ++ è iniziato con molti puntatori, ma si consiglia l'uso di riferimenti. Biblioteche come STL possono ridurre parte della nostra dipendenza. Esistono anche modi di dire per creare puntatori intelligenti con caratteristiche migliori e alcune versioni di C ++ consentono riferimenti e codice gestito.
Le pratiche di programmazione come eredità e polimorfismo usano molti suggerimenti dietro le quinte (proprio come per, mentre la programmazione strutturata genera codice pieno di istruzioni di diramazione). Lingue come Java eliminano i puntatori e usano la garbage collection per gestire i dati allocati dinamicamente invece che dipendere dai programmatori per abbinare tutte le loro nuove ed eliminare le dichiarazioni.
Nella mia lettura, ho visto esempi di programmazione multi-processo e multi-thread che non sembrano usare i semafori. Usano la stessa cosa con nomi diversi o hanno nuovi modi di strutturare la protezione delle risorse dall'uso simultaneo?
Ad esempio, un esempio specifico di un sistema per la programmazione multithread con processori multicore è OpenMP. Rappresenta una regione critica come segue, senza l'uso di semafori, che sembrano non essere inclusi nell'ambiente.
th_id = omp_get_thread_num();
#pragma omp critical
{
cout << "Hello World from thread " << th_id << '\n';
}
Questo esempio è un estratto da: http://en.wikipedia.org/wiki/OpenMP
In alternativa, una protezione simile dei thread tra loro utilizzando i semafori con funzioni wait () e signal () potrebbe apparire così:
wait(sem);
th_id = get_thread_num();
cout << "Hello World from thread " << th_id << '\n';
signal(sem);
In questo esempio, le cose sono piuttosto semplici e basta una semplice revisione per mostrare che le chiamate wait () e signal () sono abbinate e anche con molta concorrenza, viene fornita la sicurezza del thread. Ma altri algoritmi sono più complicati e utilizzano più semafori (sia binari che di conteggio) distribuiti su più funzioni con condizioni complesse che possono essere chiamate da molti thread. Le conseguenze della creazione di deadlock o della mancata sicurezza delle discussioni possono essere difficili da gestire.
Questi sistemi come OpenMP eliminano i problemi con i semafori?
Spostano il problema altrove?
Come faccio a trasformare il mio semaforo preferito usando l'algoritmo per non usare più i semafori?