gpt4 book ai didi

multithreading - 在单独的线程中创建的 Tcl Interp 是否会共享任何全局数据?

转载 作者:行者123 更新时间:2023-12-04 06:44:33 25 4
gpt4 key购买 nike

在我的 C++ 代码中,如果我为每个线程创建一个 tcl interp,并将它用于 Tcl_EvalEx 脚本,并通过 Tcl_GetStringResult 获取结果,这个线程安全吗?

除常量数据外,这些线程之间没有共享数据。

在谷歌上搜索后,我在 tcl 线程模型文档中找到了这个: http://www.tcl.tk/doc/howto/thread_model.html

Tcl lets you have one or more Tcl interpreters (e.g., created with Tcl_CreateInterp()) in each operating system thread. However, each interpreter is tightly bound to its OS thread and errors will occur if you let more than one thread call into the same interpreter (e.g., with Tcl_Eval).

我想这意味着如果我不在口译员之间共享数据,那么应该没有问题?

最佳答案

I create one tcl interp per thread, and use it to Tcl_EvalEx a script, and get result by Tcl_GetStringResult, is this thread safe?

是的。 Tcl 的引擎广泛使用特定于线程的数据,因此在线程之间传输解释器是不可能的[*](事情很糟糕),但同时保证线程安全的好处.要记住的主要事情是在与 Tcl 的实现混合时使用 Tcl 的内置内存分配器函数而不是尝试自己做,因为线程 Tcl 使用的关键之一是线程感知内存分配器(快得多,因为大多数数据都保持绑定(bind)到单个线程)。

的确,简单的代码可以保持简单。不错,是吗?


[*] 好吧,如果你做一些技巧,比如构建一个非线程感知版本等等,这是可能的,但这真的很棘手,而且只对深度专家来说是一个,因为可能会出现灾难性的问题真的很高。 Tcl 的高度分区模型非常易于使用。

关于multithreading - 在单独的线程中创建的 Tcl Interp 是否会共享任何全局数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com