问题分叉过程和创建线程

时间:2011-02-17 10:44:07

标签: pthreads fork

我的程序应该分叉三个进程。这些进程中的每一个都将创建三个线程并分叉另外两个进程。这两个额外的进程将创建三个线程。 这是我的代码。我试图用嵌套循环来保持简单。我想在某些时候我可能会提出更多进程或创建更多线程。

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

void *printme(void* Array){
    int *Arr = (int *) Array;
    int len = sizeof(Arr) / sizeof(int);
    if (len == 1){
        printf("I'm thread %d.%d",Arr[0],Arr[1]);
    }
    else if (len == 2){
        printf("I'm thread %d.%d.%d",Arr[0],Arr[1],Arr[2]);
    }
    printf("\n");
    pthread_exit(NULL);
}

int main(void){
    int i, j, k, l;
    int threadLevel1[2];
    int threadLevel2[3];
    printf("\n");   
    for (i = 1 ; i < 4 ; i++){ // Loop to fork the three main processes.
        if (fork() != 0){
            sleep(4);   
        }
        else{
            //The newly forked process will create three threads and fork two additional processes.

            for (j = 1 ; j < 4 ; j++){
                pthread_t t;                
                threadLevel1[0] = i;
                threadLevel1[1] = j;                
                if (pthread_create(&t, NULL, printme, (void*) threadLevel1) != 0){
                    perror("pthread_create");
                    exit(1);
                }   
            }
            for (k = 1; k < 3 ; k++){           
                pid_t a = fork();               
                if (a != 0){
                    sleep(2);

                }
                else if (a == -1){
                    perror("fork"); /* display error message */
                        exit(0); 
                }
                else{
                    for (l = 1 ; l < 4 ; l++){                          
                        pthread_t t;                    
                        threadLevel2[0] = i;
                        threadLevel2[1] = k;
                        threadLevel2[2] = l;    
                        if (pthread_create(&t, NULL, printme, (void*) threadLevel2)!=0)                                                 {
                            perror("pthread_create");
                            exit(1);                        
                        }                       
                    }   
                }
            }
        }
    }
    return 0; 
}

1 个答案:

答案 0 :(得分:0)

您的代码存在问题:

void *printme(void* Array){
    int *Arr = (int *) Array;
    int len = sizeof(Arr) / sizeof(int);

无论传递给len的是什么,值printme都将始终相同。那是因为C将数组作为指针传递,而不是作为嵌入长度的对象。