我有一个数字范围(即1~10000)
我需要创建threads
来搜索值X.
每个线程都有自己的间隔来搜索它(即10000 / threadNumber)
我想没有意义让线程按顺序运行。我有问题让它们同时运行......
我的代码到目前为止:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define limit 10000
#define n_threads 2
void* func1(void* arg)
{
int i=0, *value = (int *)arg;
//How may I know which thread is running and make the thread search for the right range of values ?
for(i=1; i<=limit/n_threads; i++)
{
if(*value == i){
//Print the thread ID and the value found.
}
else
//Print the thread ID and the value 0.
}
return NULL;
}
int main(int argc, char const *argv[])
{
if(argc < 2)
printf("Please, informe the value you want to search...\n");
else{
pthread_t t1, t2;
int x = atoi(argv[1]); //Value to search
pthread_create(&t1, NULL, func1, (void *)(&x));
pthread_create(&t2, NULL, func1, (void *)(&x));
pthread_join(t1, NULL);
pthread_join(t2, NULL);
}
return 0;
}
到目前为止的问题:
thread ID
。 (试过pthread_self()
,但我总是得到一个巨大的负数,所以我觉得有些不对劲。pthread_create()
创建并初始化线程,pthread_join
也会使我的主程序等待线程。但是看看我的代码,似乎并没有同时运行。 我的threadX
如何知道从哪个值开始搜索? (即:如果我有10个线程,我认为我不必创建10个函数o.O)。
是否可以让它们在没有像Mutex
这样的情况下同时运行?
答案 0 :(得分:1)
获取线程ID因操作系统而异。
请参阅how to get thread id of a pthread in linux c program?提及的@ user3078414和why compiler says ‘pthread_getthreadid_np’ was not declared in this scope?。
致@Dmitri,一个将多个值传递给线程函数的示例。线程并发运行。互斥体是处理共享数据以及如何访问它的另一章。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define limit 10000
#define n_threads 2
struct targs {
int from;
int to;
};
void *func1(void *arg) {
struct targs *args = (struct targs *) arg;
printf("%d => %d\n", args->from, args->to);
// free(arg)
return NULL;
}
int main(int argc, char const *argv[]) {
struct targs *args;
pthread_t t1;
pthread_t t2;
args = (struct targs *) malloc(sizeof(args));
args->from = 0;
args->to = 100;
pthread_create(&t1, NULL, func1, (void *) args);
args = (struct targs *) malloc(sizeof(args));
args->from = 100;
args->to = 200;
pthread_create(&t2, NULL, func1, (void *) args);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}