【问题标题】:running threads in background in c [closed]在c的后台运行线程[关闭]
【发布时间】:2013-09-19 07:22:44
【问题描述】:

我使用 pthread_create 创建了 5 个线程。我想在后台运行这些线程,所以我没有加入这些线程。但是该程序正在产生奇怪的输出。这些可能是什么原因?

程序:

for(i = 0; i < 5; i++)
{

pthread_create(&thread[i], NULL, func, &i)

}

【问题讨论】:

  • 只想知道你是否在管理同步。
  • program is producing weird output ?什么是输出,预期什么? (阅读原子指令和并发控制机制)
  • 你的程序产生了什么输出,你期待什么?也请格式化和缩进您的代码,您的问题将更具可读性。
  • 不改变问题...它应该与答案匹配
  • 请在您的问题中添加程序的输出以及您的预期......

标签: c++ c linux multithreading pthreads


【解决方案1】:

一个可能的原因可能是您将指向i 的指针作为参数传递给线程,并且该指针对于所有线程都是相同的。所以在循环之后,i 将是 5 用于 所有 个线程。


您可以通过正确的类型转换将实际值作为指针传递,而不是传递指针:

pthread_create(&thread[i], NULL, func, (void *) i);

在线程函数中:

void *func(void *thread_argument)
{
    int i = (int) thread_argument;

    /* ... */
}

【讨论】:

  • 猜得好!...可能就是这个原因
  • 感谢 Joachim,显然这是问题所在。
猜你喜欢
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 2014-04-21
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2014-09-29
相关资源
最近更新 更多