2011-03-11 101 views
7

我一直在阅读一些关于ruby多线程编程的博客。我注意到作者倾向于使用线程安全这个词。这是什么意思?为什么编写线程安全代码很重要?线程安全是什么意思?

+3

+1思考你在读什么,不是每个人都会:-) – Chris 2011-03-11 09:03:48

回答

7

如果你有一个资源(比如说一本书的全局列表),并且你有两个运行的线程可以修改这个列表。有很多情况下列表的数据会不一致。

  • (线程A读取书ANDS显示其数据)
  • (线程B删除同一本书,而数据由线程A使用)
  • (线程A现在想要一些信息添加到书)

所以,你必须使你的代码线程安全,这样在任何时候只有一个单独的线程可以有书的名单写访问。

SpyrosP提到的死锁发生在线程A阻止列表写入并等待线程B在列表中添加数据时。因为两个线程都会等待对方做他们不能做的事情。只有在线程安全机制未正确实施的情况下才会发生这种情况。

+1

很好的解释。 +1我还要补充一点,大部分已准备好的软件包(如Queue for Python)都基于开箱即用的线程安全机制。 – Spyros 2011-03-11 09:03:02

+0

@SpyroP好点!您会发现许多编程语言中已有的线程安全数据结构。我很确定ruby的一些列表和地图也关心这一点。 – Chris 2011-03-11 09:12:24