【问题标题】:C: Solve an arithmetic expression with processesC:用过程求解算术表达式
【发布时间】:2020-09-20 20:05:00
【问题描述】:

我正在尝试解决表达式 (a+bc) / (a-b+dc) + abcd ,具有不同的过程。但我不知道fork() 是如何工作的。我知道它就像一个新线程,但我怎样才能将结果加入另一个线程并在操作完成后完成每个“孩子”?

我的代码:

int arithOpera (int a, int b, int c, int d){
    int pid, pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8, pid9; 
    pid = fork();
    int term1, term2, term3; 
    if (pid == 0) { 
        sol = term1 / term2; 
    } 
  
    else { 
        pid1 = fork(); 
        if (pid1 == 0) { 
            term3 *= d; 
        } 
        else { 
            pid2 = fork(); 
            if (pid2 == 0) { 
                term3 *= c; 
            } 
            else {
                pid3 = fork(); 
                if (pid3 == 0) { 
                    term3 = a*b; 
                } 
                else {
                    pid4 = fork(); 
                    if (pid4 == 0) { 
                        term2 -= c; 
                    } 
                    else {
                        pid5 = fork(); 
                        if (pid5 == 0) { 
                            term2 += d; 
                        } 
                        else {
                            pid6 = fork(); 
                            if (pid6 == 0) { 
                                term2 = a-b; 
                            } 
                            else {
                                pid7 = fork(); 
                                if (pid7 == 0) { 
                                    term1 += a; 
                                } 
                                else {
                                    pid8 = fork(); 
                                    if (pid8 == 0) { 
                                        term1 = b * c; 
                                    } 
                                    else {
                                        sol += term3;
                                        } 
                                    } 
                                } 
                            } 
                        } 
                    } 
                } 
            } 
        } 
    } 
    return sol;
}

我应该在不同的线程中执行每个操作。

【问题讨论】:

  • fork 创建一个独立的进程。看它就像fork 创建一个独立于当前运行程序运行的全新程序。因此,他们不能自然地在他们之间共享数据,而不是没有额外的工作。对于这样的事情,使用进程(甚至线程)真的没有什么意义。
  • 为什么要使用fork?相关:stackoverflow.com/q/14170647/6699433

标签: c operating-system fork fork-join


【解决方案1】:

首先fork()生成新进程不是同一个进程的线程,如果需要创建一个新线程而不是另一个进程,可以使用pthread库(1),这里可以使用pthread_create(2 ) 来生成一个新线程,使用pthread_exit (3) 将一个线程的结果返回给另一个线程,并使用pthread_join 函数(4) 在所需线程中捕获它。

但是如果你想使用fork函数,你需要在所有不同的进程之间生成一些共享内存,在这种情况下你还需要注意可能出现的并发问题。 (如果您对并发编程一无所知,这种方式会更复杂)。

如果您希望我为您提供更广泛的解释,请告诉我。 我在此处附上有关 pthread 库函数的手册页。

  1. pthread 概览https://www.man7.org/linux/man-pages/man7/pthreads.7.html
  2. pthread_create https://www.man7.org/linux/man-pages/man3/pthread_create.3.html
  3. pthread_exit https://www.man7.org/linux/man-pages/man3/pthread_exit.3.html
  4. pthread_join https://www.man7.org/linux/man-pages/man3/pthread_join.3.html

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 2011-01-25
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多