[英]Trying to understand how pthread works in C
我正在尝试在C中使用pthread比较两个字符串。 这个想法是看完整的字符串2是否在字符串1中(例如,如果string1 = lkajdsgl
和string2 = jd
那么我将有一个匹配项)。 我不了解pthread如何以一般方式工作。 在这里,我创建我的pthreads,假设NUM_THREADS=3
,那么我应该有3个线程,线程[0],线程[1]和线程[2]。 每个都将调用Pthrd_Substring函数。 字符串将从文件中读取并在函数中进行分析。 但是,我不了解的是如何使用pthread_join
。 如果字符串长度为12个字符,而我只有3个线程,那么系统如何知道继续使用3个线程来分析字符串,直到检查完所有12个字符? (该函数查看字符串1中的每个字母,并将其与字符串2中的第一个字母进行比较,然后确定是否存在完整的字符串2。)
int main(int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int count, rc;
long t;
for(t=0;t<NUM_THREADS;t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, Pthrd_Substring, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
printf("The number of substrings is: %d\n", count);
return 1;
}
我可以使用类似:
pthread_join(threads0, NULL);
partial_sum += t.partial_count;
pthread_join(threads1, NULL);
partial_sum += t.partial_count;
pthread_join(threads2, NULL);
partial_sum += t.partial_count;
并且在功能上具有全局性吗? 但是,这是否使字符串中的每个字母都得到检查?
我很犹豫是否包含这部分内容,因为由于我不了解pthread调用在主体中是如何工作的,因此我还没有全部解决。 但是,这是我对该函数使用的伪代码,这里n1
是string1
的字符串长度, n2
是string2
的长度:
void *Pthrd_Substring(void *thrdptr)
{
int i,j,k;
int count;
int total = 0;
for (i = thrdptr; i <= (n1-n2); i++){
count=0;
for(j = i,k = 0; k < n2; j++,k++){ /*search for the next string of size of n2*/
if (*(s1+j)!=*(s2+k)){
break;
}
else
count++;
if(count==n2)
total++; /*find a substring in this step*/
}
}
partial_count = total
}
如果字符串长度为12个字符,而我只有3个线程,那么系统如何知道继续使用3个线程来分析字符串,直到检查完所有12个字符?
系统不知道-就像非线程编程一样。 如果要分析每个字符,则需要编写程序以分析每个字符。
但是,我不了解的是如何使用pthread_join。
pthread_join
只是等待线程退出。 就这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.