C 中的 Pthread arg
Pthread arg in C
我正在尝试创建 n 个线程,将整数标识符作为参数传递。我的问题是,当我从线程中读取该标识符时,会显示一些奇怪的东西。这是我的代码(简化版)
th_clientes = malloc(sizeof(int) * n_clientes);
arg_clientes = malloc(sizeof(int) * n_clientes);
t_espera = malloc(sizeof(int) * n_clientes);
// Create the pthread
for (cont = 0; cont < n_clientes; ++cont) {
arg_clientes[cont] = cont;
pthread_create(&th_clientes[cont],NULL,clientes, &arg_clientes[cont]);
}
// Waiting for them.
for (cont = 0; cont < n_clientes; ++cont) {
pthread_join(th_clientes[cont],NULL);
}
void *clientes(void *arg){
int id = *(int *)arg;
printf("Cliente %d realizando compra.\n",id);
t_espera[id] = rand() % MAX;
sleep(t_espera[id]);
printf("Cliente %d saliendo del despues de espera %d.\n",id, t_espera[id]);
}
这是我输出的一部分。
Cliente 90 realizando compra.
Cliente 91 realizando compra.
Cliente 92 realizando compra.
Cliente 93 realizando compra.
Cliente 94 realizando compra.
Cliente 15 realizando compra.
Cliente 32551 realizando compra.
Cliente -189507840 realizando compra.
Cliente 32551 realizando compra.
Cliente 32551 saliendo del despues de espera 0.
Violación de segmento (`core' generado)
谢谢。
您可能没有为 pthread_t
数组分配足够的内存。变化:
th_clientes = malloc(sizeof(int) * n_clientes);
至:
th_clientes = malloc(sizeof(pthread_t) * n_clientes);
我正在尝试创建 n 个线程,将整数标识符作为参数传递。我的问题是,当我从线程中读取该标识符时,会显示一些奇怪的东西。这是我的代码(简化版)
th_clientes = malloc(sizeof(int) * n_clientes);
arg_clientes = malloc(sizeof(int) * n_clientes);
t_espera = malloc(sizeof(int) * n_clientes);
// Create the pthread
for (cont = 0; cont < n_clientes; ++cont) {
arg_clientes[cont] = cont;
pthread_create(&th_clientes[cont],NULL,clientes, &arg_clientes[cont]);
}
// Waiting for them.
for (cont = 0; cont < n_clientes; ++cont) {
pthread_join(th_clientes[cont],NULL);
}
void *clientes(void *arg){
int id = *(int *)arg;
printf("Cliente %d realizando compra.\n",id);
t_espera[id] = rand() % MAX;
sleep(t_espera[id]);
printf("Cliente %d saliendo del despues de espera %d.\n",id, t_espera[id]);
}
这是我输出的一部分。
Cliente 90 realizando compra.
Cliente 91 realizando compra.
Cliente 92 realizando compra.
Cliente 93 realizando compra.
Cliente 94 realizando compra.
Cliente 15 realizando compra.
Cliente 32551 realizando compra.
Cliente -189507840 realizando compra.
Cliente 32551 realizando compra.
Cliente 32551 saliendo del despues de espera 0.
Violación de segmento (`core' generado)
谢谢。
您可能没有为 pthread_t
数组分配足够的内存。变化:
th_clientes = malloc(sizeof(int) * n_clientes);
至:
th_clientes = malloc(sizeof(pthread_t) * n_clientes);