pthread 编程,线程不会同时 运行
pthread programming, threads don't run simultaneously
我的程序中有以下代码:
for (i = 0; i < numthrs; i++)
{
if (0 != pthread_create(&thrs[i], NULL, thr_main,
&args[i]))
{
/* handle error */
}
printf("thread %d created.\n", i);
if (0 != pthread_join(thrs[i], &thread_status))
{
/* handle error */
}
printf("joined thread %d\n", i);
}
但我注意到线程不会同时 运行,第二个线程只有在第一个线程完成执行后才开始执行。我是 pthread 编程的新手。谁能告诉我同时启动多个线程的正确方法是什么?
这是因为您 pthread_join
每个线程在创建后立即创建,即您正在等待线程 n
完成,然后再启动线程 n+1
。
相反,尝试:
for (i = 0; i < numthrs; i++)
{
if (0 != pthread_create(&thrs[i], NULL, thr_main,
&args[i]))
{
/* handle error */
}
printf("thread %d created.\n", i);
}
for (i = 0; i < numthrs; i++)
{
if (0 != pthread_join(thrs[i], &thread_status))
{
/* handle error */
}
printf("joined thread %d\n", i);
}
我的程序中有以下代码:
for (i = 0; i < numthrs; i++)
{
if (0 != pthread_create(&thrs[i], NULL, thr_main,
&args[i]))
{
/* handle error */
}
printf("thread %d created.\n", i);
if (0 != pthread_join(thrs[i], &thread_status))
{
/* handle error */
}
printf("joined thread %d\n", i);
}
但我注意到线程不会同时 运行,第二个线程只有在第一个线程完成执行后才开始执行。我是 pthread 编程的新手。谁能告诉我同时启动多个线程的正确方法是什么?
这是因为您 pthread_join
每个线程在创建后立即创建,即您正在等待线程 n
完成,然后再启动线程 n+1
。
相反,尝试:
for (i = 0; i < numthrs; i++)
{
if (0 != pthread_create(&thrs[i], NULL, thr_main,
&args[i]))
{
/* handle error */
}
printf("thread %d created.\n", i);
}
for (i = 0; i < numthrs; i++)
{
if (0 != pthread_join(thrs[i], &thread_status))
{
/* handle error */
}
printf("joined thread %d\n", i);
}