我正在编写一个带有消费者线程和生产者线程的程序,现在看来队列同步在程序中是一个很大的开销,我寻找了一些无锁队列实现,但只找到了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()需要多少时间等。
如果您担心性能,那么添加 malloc() 不会有任何帮助。如果您不担心性能,为什么不简单地通过互斥体控制对队列的访问。您是否实际测量过此类实现的性能?在我看来,您似乎正在走熟悉的过早优化路线。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)