Con le versioni precedenti dello standard POSIX, il primo metodo con un inizializzatore può funzionare solo con variabili assegnate staticamente, non quando la variabile è una variabile auto
definita in un corpo di funzione. Sebbene non abbia mai visto una piattaforma in cui ciò non sarebbe consentito, anche per le variabili auto
e questa restrizione è stata rimossa nella versione più recente dello standard POSIX.
La variante static
è davvero preferibile se possibile, dal momento che consente di scrivere codice di bootstrap molto più facile. Ogni volta che in fase di esecuzione si immette nel codice che utilizza tale mutex, si può essere certi che il mutex è inizializzato. Questa è una preziosa informazione nel contesto multi-threading.
Il metodo che utilizza una funzione di inizializzazione è preferibile quando sono necessarie proprietà speciali per il mutex, ad esempio ricorsive per esempio o condivisibili tra processi, non solo tra thread.
fonte
2013-01-14 14:44:02
"_plus è possibile utilizzare il metodo dinamico solo se si aggiungono una serie di mutex in fase di esecuzione." "Che cosa significa? Un piccolo esempio se non è facile da spiegare? – Kalec
@Kalec: se il mutex è allocato da 'malloc()' (o appartiene a un oggetto che è allocato). –
@Kalec se la variabile mutex "lock" fa parte di una struttura, quindi non possiamo seguire il primo approccio. dobbiamo usare pthread_init(). –