我創建了一個c程序,它可以在單個進程中完成所有任務。例如,它依次按文件讀取文件,並輸出一些內容。我不得不使用一個稱爲向量的巨大數組,因此我聲明它是靜態的(因爲它給了我一個seg錯誤)。靜態雙向量[100000] [10000]。C併發進程和靜態變量
現在我需要使用多個併發進程創建前一個程序的相同輸出。
我有什麼至今:
pid_t pids[argc - 1];
int pid;
for (e=1; e < argc; e++)
{
pid = fork();
if (pid < 0)
{
//error
}
else if (pid > 0)
{
pids[e-1] = pid
}
else
{
printf("The child process of %d is started\n", pids[e-1]);
printf("The child process of %d is finished\n", pids[e-1]);
}
}
for (int i = 0 ; i < argc - 1 ; i++)
{
int status;
waitpid(pids[i], &status, 0);
printf("Process %d is finished\n", pids[i]);
}
現在,我只是想看看孩子的輸出處理交織,這意味着它們將同時運行。
到目前爲止,當我運行上述操作時,我收到了「Killed」消息,但是一旦我註釋掉靜態向量數組,它就會正常運行。這是爲什麼?
它運行時的輸出真的很奇怪,基本上我有0的pids元素。
任何幫助將不勝感激。謝謝。
因爲你調用fork,孩子的和麪值恩有獨立的記憶。現在有幾個靜態雙向量(每個進程1個)。你不會有併發症。您應該使用線程,因爲它們共享相同的內存。 –
我必須使用進程,而不是線程。 –
http://stackoverflow.com/questions/13274786/how-to-share-memory-between-process-fork。你必須使用shm函數來共享內存。 –