创建不同数量的线程
different number of thread is created
我正在学习 pthread,我正在使用 vs 代码来 运行 c 代码。
根据 vs 代码文档,我安装了 MSY2S2 MSY 并且它已安装。
当我 运行 此代码时:
#include <stdio.h>
#include<stdlib.h>
#include <pthread.h>
void *bin_finding(void *p){
int* ptr = (int*)p;
printf("%d", *ptr);
// printf("%s", "hello");
}
int main(){
int data_count = 10;
int num_of_thread = 4;
int equalDivisionCount = data_count/num_of_thread;
int excessCount = data_count%num_of_thread;
int indexCount[num_of_thread];
int i;
pthread_t tid[num_of_thread];
for(i=0; i<4; i++){
indexCount[i] = i;
pthread_create(&tid[i], NULL, bin_finding, &indexCount[i]);
}
return 0;
}
当我点击 运行 并在最左边的选项中进行调试时,每次都会给出不同的结果。
有时我得到 0
有时01
有时 0123
所以几乎每个 运行 都不一样,最常见的是 0。
如果有人,请帮助我。
您的程序在所有执行线程有机会完成之前退出。
在第一个循环之后使用第二个循环,包含对 pthread_join
的调用以等待每个线程完全执行:
for (int i = 0; i < num_of_thread; i++)
pthread_join(tid[i], NULL);
我正在学习 pthread,我正在使用 vs 代码来 运行 c 代码。 根据 vs 代码文档,我安装了 MSY2S2 MSY 并且它已安装。
当我 运行 此代码时:
#include <stdio.h>
#include<stdlib.h>
#include <pthread.h>
void *bin_finding(void *p){
int* ptr = (int*)p;
printf("%d", *ptr);
// printf("%s", "hello");
}
int main(){
int data_count = 10;
int num_of_thread = 4;
int equalDivisionCount = data_count/num_of_thread;
int excessCount = data_count%num_of_thread;
int indexCount[num_of_thread];
int i;
pthread_t tid[num_of_thread];
for(i=0; i<4; i++){
indexCount[i] = i;
pthread_create(&tid[i], NULL, bin_finding, &indexCount[i]);
}
return 0;
}
当我点击 运行 并在最左边的选项中进行调试时,每次都会给出不同的结果。
有时我得到 0 有时01 有时 0123
所以几乎每个 运行 都不一样,最常见的是 0。
如果有人,请帮助我。
您的程序在所有执行线程有机会完成之前退出。
在第一个循环之后使用第二个循环,包含对 pthread_join
的调用以等待每个线程完全执行:
for (int i = 0; i < num_of_thread; i++)
pthread_join(tid[i], NULL);