Come si può creare un mutex ragionevolmente efficiente con dimensioni del puntatore?

3

Ho le mie idee su come un mutex di dimensioni puntatore potrebbe essere fatto: Il numero intero è usato come un insieme di flag, counter, index e uno spinlock che custodisce una voce in una tabella di oggetti kernel pre-assegnati dati per mutex solo quando i thread sono in conflitto e rilasciati successivamente (servono solo al massimo N voci di tabella per N thread).

Osservare il cambiamento della struttura SRWLOCK di MS mi porta a credere che memorizzano la coda di un elenco xor (o un indice di una tabella?) nel puntatore quando viene contestato. I primi 4 bit sono flag di qualche tipo.

Per chiarire

Mi chiedevo se ci fossero altre idee su come fare un mutex in modalità utente che è la dimensione di un puntatore e richiede solo l'allocazione di un oggetto kernel se è contestato. La mia idea riguarda lo spinlocking, quindi spero che esista qualcosa che non lo è.

    
posta defube 24.07.2012 - 06:08
fonte

1 risposta

1

Il mutex dovrebbe essere rientrante? Se è così, avrai bisogno di alcuni bit per contenere un conteggio della ricorsione. Anche un ID thread / processo. Si potrebbe anche voler mantenere un puntatore o un qualche tipo di riferimento a una coda per contenere gli ID dei thread in attesa sul mutex, a seconda che si desideri accodare i thread o semplicemente consentire loro di acquisire il mutex in base al loro ordine di pianificazione. I tuoi indicatori sono 64 bit, giusto? ;)

    
risposta data 24.07.2012 - 17:04
fonte

Leggi altre domande sui tag