可变数量的线程c ++

时间:2012-11-02 21:30:56

标签: c++ pthreads

我需要创建一个c ++程序,创建一个数字a,一个线程,然后为每个线程n (0<n<a),要求每个线程将0到n之间的数字相加。所以,例如,如果a = 5,我需要创建5个线程,第三个线程需要从0添加到3.我使用main函数和while循环动态创建线程(使用pthread_create,我必须使用pthreads)。然后我有一个通用函数,所有线程都运行。我的问题是我不知道如何让每个线程知道它是哪个号码。那么,第三个线程将如何知道它是第三个而不是第一个。

我确信这很简单,但我找不到答案。

感谢您的帮助!

etk1220

2 个答案:

答案 0 :(得分:2)

创建可变数量的线程并不难。例如:

void * func(void *);

std::vector<pthread_t> threads(n);

for (std::vector<pthread_t>::iterator it = threads.begin(); it != threads.end(); ++it)
{
    int r = pthread_create(&*it, NULL, func, args);
}

如果出现错误,您需要添加错误检查和合适的回滚机制。使用<thread>库会更简单,但是你说你不能使用它。

答案 1 :(得分:0)

如果你可以使用std :: threads那么这很麻烦,你可以扩展它来做你的工作

 std::vector<std::thead> threads;
 threads.push_back(&your_function, args...);