Piszę program z wątkiem konsumenckim i wątkiem producenta, teraz wydaje się, że synchronizacja kolejki jest dużym obciążeniem w programie i szukałem niektórych implementacji kolejki wolnych od blokady, ale znalazłem tylko wersję Lamport i ulepszoną wersję na PPoPP '08:Dowolna implementacja kolejki wolnej od blokady pojedynczego klienta w 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;
}
Obie wersje wymagają wstępnie przydzielona tablicę dla danych, moje pytanie jest to, że jest jakiś pojedynczy pojedynczy konsument-producent-lock-wolna implementacja kolejki, która używa malloc(), aby przydzielić miejsca dynamicznie ?
Kolejnym pokrewnym pytaniem jest: w jaki sposób mogę zmierzyć dokładny narzut w synchronizacji kolejki? Na przykład ile czasu zajmuje pthread_mutex_lock(), itp.
Zgadzam się z tobą punkt malloc ale nie mutex. Zablokuj zabójstwa. Tak więc jeden producent i jeden konsument blokują darmowe oprogramowanie i należy z tego korzystać. Teraz ten konsument może zastosować logikę shardingu do przekazywania danych różnym konsumentom. LOCK zabija. – siddhusingh