我正在编写一个具有消费者线程和生产者线程的程序,现在似乎队列同步是程序中的一个很大开销,我寻找了一些无锁队列实现,但只找到了 Lamport 的版本和 PPoPP '08 上的改进版本:
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;
}
两个版本都需要为数据预先分配数组,我的问题是是否有单消费者单生产者无锁队列实现可以使用malloc()动态分配空间?
另一个相关的问题是,如何测量队列同步的确切开销?例如pthread_mutex_lock()需要多少时间等。