小编Cam*_*ilo的帖子

使用子进程的共享内存进行排序

我正在尝试在快速排序中使用子进程,以便左半部分在一个子进程中排序,右半部分在另一个子进程中排序。我在 shmget 实现之前就让它工作了,但现在我相信我在某个地方破坏了数组,因为在打印数组后我的所有值都变为零。抱歉,如果我在某个地方犯了一些愚蠢的错误,我正在尝试学习如何使用 fork 和 shmget 但遇到了一些麻烦。我试图将一个文本文件作为命令行参数,并给出一个分隔符,例如“;” 我必须删除分隔符并识别之间的数字,将它们放入数组中并使用子进程对它们进行排序。我的解析工作正常,快速排序工作正常,但现在我正在尝试实现共享内存,但遇到了一些问题。

谢谢

我看过几个不同的示例,但这主要基于 geeksforgeeks 示例,其中使用 fork 进行合并排序。 https://www.geeksforgeeks.org/concurrent-merge-sort-in-shared-memory/

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "fileParser.h"
#include "dataManagement.h"

int main(int argc, char *argv[]){
    char *file = argv[1];
    char delimiter = argv[2][0];
    MyArray *theArray = getArray(file, delimiter);

    size_t SHM_SIZE = theArray->length;

    theArray->key = IPC_PRIVATE;


    if((theArray->shmid = shmget(theArray->key, SHM_SIZE, IPC_CREAT | 0666)) < 0){
        perror("shmget");
        _exit(-1);
    }

    if ((theArray->shm_array = shmat(theArray->shmid, NULL, 0)) == (int *) -1)
    {
        perror("shmat");
        _exit(1);
    }

    printArray(theArray, theArray->length);
    quickSortFork(theArray, 0, …
Run Code Online (Sandbox Code Playgroud)

c fork shared-memory

1
推荐指数
1
解决办法
1675
查看次数

标签 统计

c ×1

fork ×1

shared-memory ×1