并发数据结构和线程安全数据结构是否相同?

时间:2014-10-14 07:33:03

标签: multithreading concurrency language-agnostic parallel-processing concurrent-programming

并发数据结构:

[1] http://www.cs.tau.ac.il/~shanir/concurrent-data-structures.pdf

[2] http://en.wikipedia.org/wiki/Concurrent_data_structure

并发数据结构和线程安全数据结构是否可以互换?

2 个答案:

答案 0 :(得分:2)

我的理解与@xxa不同(答案是:)。虽然我也没有一个好奇的定义。 Concurrent表示线程安全。但如今,它意味着同时访问。虽然线程安全没有给出这样的假设。请参阅上述Wiki-article

中的此引文
  

今天,随着提供并行性的多处理器计算机体系结构成为主导计算平台(通过多核处理器的扩散),该术语主要表现为可由多个线程访问的数据结构,这些线程实际上可以访问数据同时,因为它们运行在彼此通信的不同处理器上。

例如,声称STL容器对于给定条件(只读)是线程安全的,而且,它允许多个线程同时读取(STL表示它们“像int一样安全”),但是只有一个线程可以修改它们并且没有读者。我们可以将它们命名为“并发”吗?不行。虽然实际的并发容器(例如,参见)允许至少两个或多个线程同时使用容器(包括修改)。

还有一点。您可以实现std::queue,以便方法push()和pop()在被不同线程使用时不会触发失败。但这会使它成为concurrent_queue吗?不会。因为,queue::front()queue::pop()没有提供一种方法来在没有外部同步的情况下通过两个或多个线程同时获取元素。要成为concurrent_queue它需要不同的接口,它通过组合pop()和返回值来处理原子性。

答案 1 :(得分:0)

这些术语没有严格的定义,但总的来说可以断言你的问题的答案是。 两者都指存​​储在共享内存(http://en.wikipedia.org/wiki/Shared_memory)中并由多个线程或进程操纵的数据结构。

事实上[1]在明确引用线程时断言相同:

  

这个额外难度的主要来源是并发性:因为线程在不同的处理器上并发执行,..."