boost :: thread函数执行

问题描述

| 我如何使用boost :: thread来执行一个函数,而每个线程都在其自己的内存空间中执行。这样,当我在函数中分配新变量时,它仅作为实例在执行线程中存在。 只是为了澄清一下,我想生成使用boost :: thread执行相同方法的线程,但是我不想使用锁或信号量,我只是希望它在单独的空间中执行。     

解决方法

您在线程函数内分配的所有内容对于该函数来说都是本地的,只要它们未声明为“ 0”即可。只需正常编写代码(避免使用
static
局部变量),就可以了。     ,如果您需要创建一个在其自身的地址空间内完全运行的线程,那么您要做的就是创建一个进程,而不是线程。根据定义,线程是在父进程的相同地址空间中运行的执行点。 如果您确实需要创建线程(即仍然有内存和线程之间共享的其他资源),但是还需要为特定线程分配一部分内存,那么您几乎没有选择: 1)根据ildjarn的建议,让线程过程分配本地(或动态内存)并编写代码,以便每个线程都使用为其分配的内存 2)看一下TLS(线程本地存储)。它是一个API,可让您创建专用于特定线程的\“ global \”变量。 C ++的某些变体还具有内置关键字,用于声明在后台使用TLS的变量。 请注意,在上述选项中,一个线程将无法破坏另一个线程的内存时,您不会获得自动隔离。获得这种隔离的唯一方法是派生多个进程(或切换到一种.NET语言并实例化在同一进程中运行的多个AppDomain)。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...