线程创建n个线程时的信号量

时间:2019-06-09 15:19:18

标签: multithreading pseudocode

我遇到了以下家庭作业问题:

线程“父代”创建n个子线程,每个子代创建n个孙子线程,每个子孙使用caesar依次加密一部分文本,然后,子线程再次使用另一种方法再次加密文本。文本被双重加密,父级可以创建另一个子线程以重复该过程

文本的分发如下:如果文本有51个字符并创建2个子代,则子代1以0开始加密,以24结尾;否则,子代1开始加密。其子孙将分别在0-11和12-24中开始加密,子2从25开始并在51中结束,其子孙将在26-38和39-51中开始加密

这是我提出的解决方案

孩子由用户决定,可以是任意值

semaphore caesar = 0;
semaphore method2 = 0;
semaphore Echild = 1; //Mutual exclusion for each child
semaphore Egc = 1; //Mutual exclusion for each grand child
semaphore end = 0; //End of the program, father prints the final text
int multiplier = 1;
int mult = 1;
int begin = 0;
int end = 0;
int children;
char * text = "This is an example of double encrypting"
int length = strlen(text);

父母:

    for (int i = 0; i < children; i++){
        createChild();
        wait(method2);
        mult = 1;
        multiplier = 1;
        wait(end);
        printf("End of program, final text is %s\n",text);

}

孩子

    wait(Echild);
    for (int g = 0; g < children; g++){
        createGrandChild();
        end = (multiplier*(length/children))-1;
        wait(caesar);
        cryptInMethod2(text,begin,end);
        begin+=end+1;
        multiplier++;
        signal(method2);
        signal(Echild);
}

signal(end);

孙子

    wait(Egc)
        if (g == 0){
            beingG = begin;
        }

    endG= (mult*(begin+end/children))-1;
    cryptInCaesar(text,beginG,endG);
    mult++;
    beginG+=endGg+1;
        if (g+1 == children)
            signal(caesar);
    signal(Egc);

0 个答案:

没有答案