当前位置:  开发笔记 > 编程语言 > 正文

线程通信理论

如何解决《线程通信理论》经验,为你挑选了2个好方法。

线程通信背后的共同理论是什么?关于它应该如何运作,我有一些原始的想法,但有些东西不适合我.有中断的方法吗?



1> Charlie Mart..:

实际上,它与任何并发问题都是一样的:你有多个控制线程,并且不确定哪些线程执行时的哪些语句.这意味着程序中存在大量潜在的执行路径,并且您的程序必须在所有路径下都是正确的.

一般来说,可能发生故障的地方是线程之间共享状态(过去称为"轻量级进程").当存在共享内存区域时会发生这种情况.

为确保正确性,您需要做的是确保以不会导致错误的方式更新这些数据区域.为此,您需要确定程序的"关键部分",其中必须保证顺序操作.那些可以是单个指令或代码行; 如果语言和架构确保这些是原子的,也就是说,不能被打断,那么你就是金色的.

否则,你会把那个部分归为一类,然后把一些防护装置放在上面.经典的方法是使用信号量,这是一个原子语句,一次只允许一个控制线程过去.这些是由Edsgar Dijkstra发明的,因此有来自荷兰人,PV的名字.当你来到P时,只有一个线程可以进行; 所有其他线程都排队等待,直到执行线程进入关联的V操作.

因为这些原语有点原始,并且因为荷兰语名称不是非常直观,所以已经开发了一些更大规模的方法.

Per Brinch-Hansen发明了监视器,它基本上只是一个具有保证原子性的操作的数据结构; 它们可以用信号量实现.监视器几乎就是Java synchronized语句的基础; 它们使一个对象或代码块具有该特定的行为 - 也就是说,一次只有一个线程可以"在"它们中 - 使用更简单的语法.

还有其他模式可能.Haskell和Erlang通过一种函数式语言来解决这个问题,这些函数语言一旦创建就永远不允许变量被修改; 这意味着他们自然不需要了解同步.一些新的语言,如Clojure的,而是有一个名为"事务内存"结构,这基本上意味着,当有一个分配,保证能让你的任务是原子的和可逆的.

简而言之,就是这样.要真正了解它,最好查看操作系统文本,例如,Andy Tannenbaum的文本.



2> Sean..:

线程通信的两种最常见机制是共享状态和消息传递.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有