数据结构的线程安全性,添加同步原语的位置?

cre*_*wit 7 c c++ multithreading pthreads thread-safety

这是一个设计问题,一直困扰着我一段时间.实际上非常简单,当您提供数据结构库时,您是构建线程安全原语还是仅提供构造并让系统使用它来决定如何实现实际操作.

一个简单的例子,一个支持Producer,Consumer模型的循环缓冲区.2方法,获取和写入,每个更新全局变量填充计数.现在,您是否只是提供互锁来锁定并让使用缓冲区的代码获取互斥锁,或者在内部进行锁定并提供开箱即用的互斥.

STL似乎采取外部方法,但有性能原因,为什么你想要提供更细粒度的锁定.

想法?

San*_*raj 2

我不久前就在思考这个确切的问题。因此,我继续编写了一些示例代码来了解各种方法的优点和缺点。因此,我不给出理论上的答案,而是为您在 OP 中提到的相同问题提供一些代码,即具有多个生产者和消费者的循环缓冲区(队列)。

这里是。

也许查看代码可以让您得到一些澄清。如果需要的话,我会添加更多点..但现在,看看代码并得出显而易见的结论!