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

Multithreading 在TCL中跨线程共享类和对象信息,multithreading,tcl,Multithreading,Tcl,如果您能帮助我解决以下问题,我将非常高兴: 在创建线程之前定义的类在线程内部不可见。 tcl/iTCL中是否有一种解决方案可以跨线程查看类定义 问候,, Sridhar S在Tcl中没有真正的全局变量(除了像env数组这样的一些东西,它有特殊的互斥体保护它)。所有Tcl/itcl类都固有地绑定到特定的解释器上下文,每个解释器上下文固有地绑定到特定的线程。Tcl的实现广泛使用特定于线程的数据,将全局锁的数量减少到绝对最小;我们甚至有非锁定内存分配器,以确保该全局资源不会成为瓶颈。Tcl的“全局”名

如果您能帮助我解决以下问题,我将非常高兴:

在创建线程之前定义的类在线程内部不可见。 tcl/iTCL中是否有一种解决方案可以跨线程查看类定义

问候,,
Sridhar S

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

线程扩展在线程之间发送消息(严格来说,是在每个线程中注册的主解释器之间)。您可以使用它来模拟全局对象,方法是在其他线程中放置一个代理,将方法调用转发给主线程中的真正主对象。这会产生相当大的开销(如果有太多的代理来回争用,可能会导致死锁),但这是一种简单的方法


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

请发布一些代码来演示您的问题好吗?