【发布时间】:2020-08-15 08:26:45
【问题描述】:
我想在以下代码中插入 pthread_join 函数来终止我的线程并更新变量值。之后我的想法是创建一个变量来添加我从线程中获得的新值并将其打印出来。 我有以下代码,似乎工作正常,但我想直接更新变量 a 和 b 没有任何额外的变量(我不想使用aux_soma 和 aux_multiplicacao)。 如果我尝试直接更新它们,它们会将它们的值设置为 0(主要是变量 a)。有什么办法可以按照我想要的方式进行吗?代码是用葡萄牙语写的,很抱歉,我希望你能理解它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
void *soma(void *valor)
{
int a = (intptr_t) valor;
a = 10 + a;
//printf("A thread soma terminou.\n");
pthread_exit((void*)(intptr_t)a);
}
void *multiplicacao(void *valor)
{
int a = (intptr_t) valor;
a = 10 * a;
//printf("A thread multiplicacao terminou.\n");
pthread_exit((void *)(intptr_t)a);
}
int main()
{
pthread_t p, t;
int a = 5, b = 5;
int aux_soma, aux_multiplicacao; // Variáveis auxiliares para evitar erros
printf("\n\n"); // Duas linhas em branco; Para ficar separado e mais apresentável
// Estava a dar erro no valor das variáveis e da soma, desta maneira não há erros
int ra = pthread_create(&p, NULL, soma, (void *)(intptr_t)a);
int rb = pthread_create(&t, NULL, multiplicacao, (void *)(intptr_t)b);
pthread_join(t, (void **) &aux_multiplicacao);
pthread_join(p, (void **) &aux_soma);
a = aux_soma;
b = aux_multiplicacao;
int soma_ab = a + b;
printf("\nIDthread soma = %d\n", (int) p);
printf("IDthread multiplicacao = %d\n", (int) t);
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("Soma: a + b = %d\n", soma_ab);
exit(0);
}
提前致谢。
【问题讨论】:
标签: c pthreads pthread-join