2010-11-23 16 views
23

La funzione pthread_mutex_init consente di specificare un puntatore a un attributo. Ma devo ancora trovare una buona spiegazione di cosa siano gli attributi di pthread. Ho sempre fornito NULL. È utile a questo argomento?qual è l'"attributo" di un mutex pthread?

La documentazione, per quelli di voi che si dimentica:

pthread_mutex_init (3) BSD Biblioteca Funzioni Manuale
pthread_mutex_init (3)

NOME pthread_mutex_init - crea un mutex

SYNOPSIS

#include <pthread.h> 

int 
pthread_mutex_init(pthread_mutex_t *restrict mutex, 
    const pthread_mutexattr_t *restrict attr); 

DESCRIZIONE La funzione pthread_mutex_init() crea un nuovo mutex, con attributi specificati con attr. Se attr è NULL, vengono utilizzati gli attributi predefiniti.

risposta

33

Il posto migliore per scoprire che le informazioni da pagine standard POSIX.

Un attributo NULL mutex ti dà un attributo di default implementazione definito. Se vuoi sapere che cosa puoi fare con gli attributi, controlla lo following reference e segui i link pthread_mutexattr_* nella sezione SEE ALSO. Di solito, il valore predefinito è un set di attributi ragionevole ma può variare a seconda della piattaforma, quindi preferisco creare in modo esplicito mutex con attributi noti (meglio se per la portabilità).

Questo è per il numero 7 dello standard, 1003.1-2008. Il punto di partenza è here. Cliccando su Headers in basso a sinistra ti permetterà di navigare verso la funzionalità specifica (incluso pthreads.h).

Gli attributi consentono di impostare o ottenere:

  • il type (deadlocking, stallo-rilevamento, ricorsivo, ecc).
  • il robustness (cosa succede quando si acquisisce un mutex e il proprietario originale è morto mentre lo possedeva).
  • il process-shared attribute (per la condivisione di un mutex tra i limiti del processo).
  • il protocol (come un thread si comporta in termini di priorità quando un thread con priorità più alta desidera il mutex).
  • priority ceiling (la priorità a cui verrà eseguita la sezione critica, un modo per evitare l'inversione di priorità).

E, per completezza, anche lo init and destroy calls, non direttamente correlato a un attributo specifico ma utilizzato per crearli.

1

Se si scorre verso il basso la funzione di messa in vendita per <pthread.h>, troverete un sacco di pthread_mutexattr_... funzioni, tra cui un init, destroy e funzioni per impostare vari attributi di un mutex. Quando si passa NULL, il mutex viene creato con valori predefiniti adatti per tutti questi attributi, ma se è necessario modificare attributi specifici, è possibile costruire una struttura pthread_mutexattr_t e passarla.

4

Tutti gli attributi mutex sono impostati in un attributo mutex oggetto da una funzione della forma:

int pthread_mutexattr_setname(pthread_attr_t *attr, Type t); 

Tutti gli attributi mutex vengono recuperati da un oggetto attributo mutex da una funzione della forma:

int pthread_mutexattr_getname(const pthread_attr_t *attr, Type *t); 

dove nome e tipo sono definiti come nella scheda le sotto:

Type and Name Description and Value(s) 
int protocol Define the scheduling classes for mutex locks 
       PTHREAD_PRIO_NONE,PTHREAD_PRIO_PROTECT, 
       PTHREAD_PRIO_INHERIT 

int pshared Defines whether a mutex is shared with other processes. 
       PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_PRIVATE 

int prioceiling Used for mutex attribute priority ceiling values. 
       See POSIX.1 section 13 

int type Application defined mutex locking 
       PTHREAD_MUTEX_NORMAL,PTHREAD_MUTEX_RECURSIVE, 
       PTHREAD_MUTEX_ERRORCHECK,PTHREAD_MUTEX_DEFAULT 
0

L'applicazione di NULL a questo argomento implica l'utilizzo dell'argomento predefinito. Quindi per alcuni motivi potresti voler cambiare queste impostazioni predefinite (usando pthread_mutexattr_init).

La documentazione spiega tutto ciò che serve su queste impostazioni mutex.

+3

Se la documentazione fosse utile, la domanda non dovrebbe essere richiesta. :-) Ho cercato per la maggior parte di un'ora di trovare le risposte alla stessa domanda, prima di imbattersi in questa. –

Problemi correlati