Sto scrivendo un programma con un thread di consumo e un thread di produzione, ora sembra che la sincronizzazione delle code sia un grosso sovraccarico del programma, e ho cercato alcune implementazioni di lock free, ma ho trovato solo la versione di Lamport e una versione migliorata PPoPP '08:Qualsiasi implementazione di coda libera con blocco singolo produttore single-consumer in C?
enqueue_nonblock(data) {
if (NULL != buffer[head]) {
return EWOULDBLOCK;
}
buffer[head] = data;
head = NEXT(head);
return 0;
}
dequeue_nonblock(data) {
data = buffer[tail];
if (NULL == data) {
return EWOULDBLOCK;
}
buffer[tail] = NULL;
tail = NEXT(tail);
return 0;
}
Entrambe le versioni richiedono una serie di pre-assegnato per i dati, la mia domanda è che esiste un unico produttore di implementazione di coda senza blocchi singolo consumatore che utilizza malloc() per allocare lo spazio in modo dinamico ?
E un'altra domanda correlata è: come posso misurare l'overhead esatto nella sincronizzazione della coda? Ad esempio quanto tempo ci vuole per pthread_mutex_lock(), ecc.
Sono d'accordo con te punto malloc ma non mutex. Blocco uccide. Quindi un produttore e un consumatore lavorano senza bloccare e si dovrebbe usare questo. Ora questo consumatore in un secondo momento può applicare la logica di sharding per inviare dati a diversi consumatori. LOCK uccide. – siddhusingh