Zel*_*luX 11 c multithreading lock-free data-structures
我正在编写一个带有消费者线程和生产者线程的程序,现在看来队列同步在程序中是一个很大的开销,我找了一些无锁队列实现,但只发现了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;
}
Run Code Online (Sandbox Code Playgroud)
两个版本都需要为数据预先分配的数组,我的问题是,是否存在使用malloc()动态分配空间的任何单用户单生产者无锁队列实现?
另一个相关的问题是,如何测量队列同步中的确切开销?比如pthread_mutex_lock()需要多长时间等.
小智 7
如果你担心性能,将malloc()添加到混合中将无济于事.如果您不担心性能,为什么不简单地通过互斥锁控制对队列的访问.您是否真的测量过这种实现的性能?听起来好像你正在走下熟悉的过早优化路线.
| 归档时间: |
|
| 查看次数: |
6510 次 |
| 最近记录: |