boost::thread函数执行

Posted

技术标签:

【中文标题】boost::thread函数执行【英文标题】:boost::thread function execution 【发布时间】:2011-04-15 00:08:10 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

你在线程函数中分配的任何东西都已经是该函数的本地函数,只要它们没有被声明为static。只需像往常一样编写代码(避免static 局部变量)就可以了。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于boost::thread函数执行的主要内容,如果未能解决你的问题,请参考以下文章

线程和非线程函数调用的执行顺序是啥?

中断正在执行 MKL 或其他第三方函数的线程

使用 Boost::thread 类的线程池实现

BOOST 线程完全攻略

boost库 线程使用

boost::thread编程-线程中断(转)