【问题标题】:Variable number of threads c++可变数量的线程c ++
【发布时间】:2012-11-02 21:30:56
【问题描述】:

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

我确信这很简单,但我一直无法找到答案。

感谢您的帮助!

etk1220

【问题讨论】:

  • 如果这是家庭作业 - 请标记它。
  • @MikyDinescu 作业标签是offically deprecated
  • 不是作业,我重新表述了这个问题,所以它会很容易解释,我只需要找到一种方法让每个线程知道它在具有动态线程数的程序中是哪个数字thx
  • “我确信这很简单,但我一直无法找到答案。”因为功课当然是让你出去寻找现成的答案,对吧?你不应该真正学习如何自己解决这个问题。

标签: c++ pthreads


【解决方案1】:

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

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);
}

您需要添加错误检查和适当的回滚机制以防出现错误。使用&lt;thread&gt; 库会简单得多,但你说你不能使用它。

【讨论】:

  • 我所需要的只是提示您可以将 args 以 void * 的形式传递到线程中
【解决方案2】:

如果你可以使用 std::threads 那么这很简单,你可以扩展它来完成你的工作

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

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 2020-12-08
    • 1970-01-01
    • 2013-04-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多