【发布时间】:2012-02-03 16:38:46
【问题描述】:
这是一个困扰我一段时间的设计问题。真的很简单,当您提供数据结构库时,您是构建线程安全原语还是仅提供构造并让使用它的系统决定如何实现实际操作。
一个简单的例子,一个支持生产者、消费者模型的循环缓冲区。 2 个方法,Get 和 Write,每个都更新一个全局变量填充计数。现在,您是只提供互斥锁并让使用缓冲区的代码获取互斥锁,还是在内部锁定并提供开箱即用的互斥锁。
STL 似乎采取了在外部进行的方法,但是出于性能原因,您希望提供更细粒度的锁定。
想法?
【问题讨论】:
-
如果您将线程安全直接构建到您的数据结构中,您不仅会紧密耦合两个独立的设计概念,而且可能会降低一些性能。
-
@AJG85 好的性能参数,如果你将它构建到数据结构中,你实际上可以设计更细粒度的锁定原语。我认为性能可能会更好。
-
@shrin:我的意思是获取锁需要额外的资源。在单线程应用程序或某些类型的容器中,您最终可能会为不需要的东西付费。
标签: c++ c multithreading thread-safety pthreads