在TCL中跨线程共享类和对象信息

时间:2014-04-09 03:08:04

标签: multithreading tcl

如果你能解决以下问题,我会很高兴:

创建线程之前定义的类在Thread内部不可见。 在tcl / iTCL中是否有解决方案来获取跨线程的类定义的可见性?

此致 Sridhar S

1 个答案:

答案 0 :(得分:0)

在Tcl中没有真正的全局变量(除了像env数组这样的一些东西,它有特殊的互斥锁来保护它)。所有Tcl / itcl类都固有地绑定到特定的解释器上下文,并且每个解释器上下文固有地绑定到特定线程。 Tcl的实现广泛使用特定于线程的数据来将全局锁的数量减少到绝对最小值;我们甚至拥有非锁定内存分配器,以确保其他全局资源不是瓶颈。 Tcl的“全局”命名空间实际上只对特定的解释器是全局的;其他口译员有自己的“全球”命名空间,他们完全独立。

线程扩展在线程之间发送消息(严格地说,在每个线程中注册的主解释器之间)。您可以通过将代理放在其他线程中来使用它来模拟全局对象,这些线程将方法调用转发到其主线程中的真实主对象。这会产生相当多的开销(并且如果你有太多的代理人来回反击会造成死锁),但这是一种简单的做事方式。

但是,您最好不要设计代码而不需要单个全局主对象。他们总是一直是瓶颈(除非他们完全是只读的,但在这种情况下,你可以将它们复制到每个帖子中)。

相关问题