boost :: thread函数执行

时间:2011-04-15 00:08:11

标签: c++ multithreading boost

如何使用boost :: thread来执行一个函数,每个线程在自己的内存空间中执行。因此,当我在函数中分配一个新变量时,它只作为执行线程中的一个实例。

只是为了澄清我想生成使用boost :: thread执行相同方法的线程,但我不想使用锁或信号量,我只是希望它在一个单独的空间中执行。

2 个答案:

答案 0 :(得分:4)

您在线程函数内分配的任何内容都已经是该函数的本地函数,只要它们未声明为static即可。只需正常编写代码(避免static局部变量),你就可以了。

答案 1 :(得分:3)

如果您需要创建一个完全在其自己的地址空间内运行的线程,那么您要做的是创建一个进程,而不是一个线程。根据定义,线程是在父进程的同一地址空间内运行的执行点。

如果你真的需要创建线程(即线程之间仍有内存和其他资源共享),但你还需要有一部分专用于特定线程的内存,那么你有几个选择: 1)正如ildjarn建议的那样,让线程程序分配本地(或动态内存)并编写代码,以便每个线程使用它为自己分配的内存 2)看看TLS(线程本地存储)。它是一个API,允许您创建专用于特定线程的“全局”变量。此外,C ++的一些变体具有内置关键字,用于声明在引擎盖下使用TLS的变量。

请注意,在上面的选项中,如果线程无法破坏其他线程内存,则不会自动隔离。获得此隔离的唯一方法是生成多个进程(或切换到.NET语言之一并实例化在同一进程中运行的多个AppDomain)。