试图了解pthread在C

时间:2017-04-24 00:08:09

标签: c multithreading pthreads pthread-join pthread-exit

我试图在C中使用pthread来比较两个字符串。我们的想法是查看完整的字符串2是否在字符串1中(例如,如果string1 = lkajdsglstring2 = 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的字符串长度为string1n2string2的长度:

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
}

1 个答案:

答案 0 :(得分:1)

  

如果字符串长度为12个字符且我只有3个线程,系统如何知道继续用3个线程分析字符串,直到检查了所有12个字符?

系统不知道 - 就像非线程编程一样。如果你想要分析每个角色,那么你需要编写你的程序,以便分析每个角色。

  

但是,我不明白的是如何使用pthread_join。

pthread_join等待线程退出。就是这样。