如何使用boost :: thread来执行一个函数,每个线程在自己的内存空间中执行。因此,当我在函数中分配一个新变量时,它只作为执行线程中的一个实例。
只是为了澄清我想生成使用boost :: thread执行相同方法的线程,但我不想使用锁或信号量,我只是希望它在一个单独的空间中执行。
答案 0 :(得分:4)
您在线程函数内分配的任何内容都已经是该函数的本地函数,只要它们未声明为static
即可。只需正常编写代码(避免static
局部变量),你就可以了。
答案 1 :(得分:3)
如果您需要创建一个完全在其自己的地址空间内运行的线程,那么您要做的是创建一个进程,而不是一个线程。根据定义,线程是在父进程的同一地址空间内运行的执行点。
如果你真的需要创建线程(即线程之间仍有内存和其他资源共享),但你还需要有一部分专用于特定线程的内存,那么你有几个选择: 1)正如ildjarn建议的那样,让线程程序分配本地(或动态内存)并编写代码,以便每个线程使用它为自己分配的内存 2)看看TLS(线程本地存储)。它是一个API,允许您创建专用于特定线程的“全局”变量。此外,C ++的一些变体具有内置关键字,用于声明在引擎盖下使用TLS的变量。
请注意,在上面的选项中,如果线程无法破坏其他线程内存,则不会自动隔离。获得此隔离的唯一方法是生成多个进程(或切换到.NET语言之一并实例化在同一进程中运行的多个AppDomain)。