- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 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 byTcl_GetStringResult
, is this thread safe?
是的。 Tcl 的引擎广泛使用特定于线程的数据,因此在线程之间传输解释器是不可能的[*](事情很糟糕),但同时保证线程安全的好处.要记住的主要事情是在与 Tcl 的实现混合时使用 Tcl 的内置内存分配器函数而不是尝试自己做,因为线程 Tcl 使用的关键之一是线程感知内存分配器(快得多,因为大多数数据都保持绑定(bind)到单个线程)。
的确,简单的代码可以保持简单。不错,是吗?
[*] 好吧,如果你做一些技巧,比如构建一个非线程感知版本等等,这是可能的,但这真的很棘手,而且只对深度专家来说是一个,因为可能会出现灾难性的问题真的很高。 Tcl 的高度分区模型非常易于使用。
关于multithreading - 在单独的线程中创建的 Tcl Interp 是否会共享任何全局数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257840/
我是一名优秀的程序员,十分优秀!