【发布时间】:2010-02-02 20:07:07
【问题描述】:
我正在使用 pthreads 和 C++ 创建一个数据并行程序。从pthread function from a class,我发现了如何为pthread_create 提供指向静态C++ 函数的函数指针(并为其提供this 参数)。
但是,我还需要为线程提供索引,以便它知道它正在处理哪些数据。我可以为每个线程malloc 一个结构(同时包含指向 C++ 类的指针和一个索引),但这似乎会添加一些簿记代码,并且如果不释放该结构可能会导致泄漏。有没有更好的方法来做到这一点?
【问题讨论】:
-
为什么不把那个结构放在堆栈上呢?说
Context context;而不是malloc-ing?这不会为您节省预订费用吗? -
@Dmitry:问题是您必须保证变量的生命周期超出线程中的使用范围。如果您在 a 函数中创建一个变量,启动线程并退出该函数,那么在新创建的线程开始使用它之前,局部变量可能会被销毁(如果调用另一个函数,则会被覆盖)。当然,如果您知道情况并非如此(创建线程的同一函数也等待完成,那可能是一个简单的解决方案。