2011-04-15 133 views
1

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

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

回答

4

您在线程函数内分配的任何内容对于该函数而言都是本地的,只要它们未声明为static即可。正常编写你的代码(避免static局部变量),你会没事的。

3

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

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

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