Estoy escribiendo un programa con un hilo de consumidor y un productor, ahora parece que la sincronización de cola es una gran sobrecarga en el programa, y busqué algunas implementaciones de cola sin bloqueo, pero solo encontré la versión de Lamport y una versión mejorada en PPoPP '08:Cualquier implementación de cola libre de bloqueo de un solo productor de un solo consumidor en 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;
}
Ambas versiones requieren un conjunto de pre-asignado para los datos, mi pregunta es que hay alguna, solo consumidor-productor único libre de bloqueo aplicación de colas que utiliza malloc() para asignar dinámicamente espacio ?
Y otra pregunta relacionada es, ¿cómo puedo medir la sobrecarga exacta en la sincronización de cola? Por ejemplo, cuánto tiempo lleva tomar pthread_mutex_lock(), etc.
Estoy de acuerdo contigo punto malloc pero no mutex. Bloqueo mata. Entonces, un productor y un consumidor bloquean las obras gratuitas y uno debería usar esto. Ahora, este consumidor más adelante puede aplicar lógica de fragmentación para arrojar datos a diferentes consumidores. LOCK mata. – siddhusingh