2014-04-09 76 views
0

我必須設計一個涉及消費者 - 生產者問題的多線程應用程序。到目前爲止,在嘗試實現我的解決方案之前,我一直試圖讓Pthreads正常工作。但是,我的程序甚至不會加載我的pthread上的函數。我不確定我在這裏做錯了什麼。程序將不會執行pthread

#include <pthread.h> 
#include <stdlib.h> 
#include <stdio.h> 
void* Producer(void *arg) 
{ 
    printf("\nEntered Producer\n"); 
    int i, item, index; 

    index = (int)arg; 

    FILE *f = fopen(bookorders, "r"); 
    char c = fgetc(f); 
    int z =0; 
    while (c!=EOF) { 
     char * buffer = (char *)malloc(1000); 
     while (c!='\n') { 
      *(buffer+z) = c; 
      z++; 
      c = fgetc(f); 
     } 

     char delim[2] = "|"; 
     printf("%s\n", buffer); 
    } 



} 

int main(int argc, const char * argv[]) 
{ 
    pthread_t Produc; 

    pthread_create(&Produc, NULL, Producer, NULL); 

    return 0; 
} 

我想我最大的問題是什麼是創建一個並行線程,然後得到它的運行功能,在這種情況下是我的製片功能

回答

2

這裏發生的事情是你的主線程的正確過程請致電pthread_create並立即返回,並且由於主線程退出,您的生產線程也會退出。你需要做的是,指示主線程等待Produc線程完成執行。

int main(){ 
     //Call pthread_create 
     pthread_join(Produc, NULL) ; 
     return 0; 
} 
+0

太棒了!謝謝你完美的工作! – AbhishekSaha

+0

另外,請記住,如果您有多個線程要創建,請先爲所有線程編寫pthread_create,然後在所有線程上調用pthread_join。 – Sanketh