我遇到了以下家庭作业问题:
线程“父代”创建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);