运行时错误多处理互斥体 - 进程同步

Posted

技术标签:

【中文标题】运行时错误多处理互斥体 - 进程同步【英文标题】:Runtime Error Multi-Processing Mutex - Process Sync 【发布时间】:2021-04-24 08:26:32 【问题描述】:

我正在尝试解决经典的哲学家就餐问题。哲学家就餐问题指出,K 个哲学家围坐在一张圆桌旁,每对哲学家中间夹一根筷子。每个哲学家之间有一根筷子。哲学家如果能拿起旁边的两根筷子,就可以吃饭。一根筷子可以被它的任何一个相邻的追随者拿起,但不能同时被两者都拿起。我正在尝试通过多处理来解决这个问题,这意味着每根筷子都是互斥体,每个哲学家都是一个过程。

HANDLE forks[NUMBER_OF_FORKS];

int main()

    STARTUPINFO si[NUMBER_OF_PHILOSOPHERS]; // NUMBER_OF_PHILOSOPHERS is 5
    PROCESS_INFORMATION pi[NUMBER_OF_PHILOSOPHERS]; // NUMBER_OF_PHILOSOPHERS is 5

    initForks(NUMBER_OF_PHILOSOPHERS); // The function initializing all the Mutexs

    std::string param;
    LPWSTR test;

    for (int i = 0; i < NUMBER_OF_PHILOSOPHERS; i++)
    
        ZeroMemory(&si[i], sizeof(si[i]));
        si[i].cb = sizeof(si[i]);
        ZeroMemory(&pi[i], sizeof(pi[i]));
        
        // Converting the param to LPWSTR(The param represent the number of the philosopher).
        param = std::to_string(i);
        test = ConvertString(param);

        if (!CreateProcess(L"..\\Debug\\Philosopher.exe", test, NULL, NULL, FALSE, 0, NULL, NULL, &si[i], &pi[i]))
        
            std::cout << GetLastError() << std::endl;;
        
    

    for (int i = 0; i < NUMBER_OF_PHILOSOPHERS; i++)
    
        WaitForSingleObject(pi[i].hProcess, INFINITE);
    

在第 17 行,当我使用 CreateProcess 函数时,我收到此错误: showing the error

有人可以帮我找出问题吗?谢谢大家的帮助!

【问题讨论】:

对话框上有说明。仔细阅读它们。 【参考方案1】:

从图片可以看出,

Expression : _p !- nullptr

你没有初始化test变量,试试这个,

LPWSTR test = new WCHAR[100];
memset(test, NULL, 200);
...

或者,

 std::string param;
 WCHAR test[100];
 param = std::to_string(i);
 mbstowcs(test, param.c_str(), param.size() + 1);  //Converts a multibyte character string from the array whose first element is pointed to by src to its wide character representation.
 

【讨论】:

以上是关于运行时错误多处理互斥体 - 进程同步的主要内容,如果未能解决你的问题,请参考以下文章

并发 并行 同步 异步 多线程 阻塞 非阻塞的区别

互斥与同步

并发 互斥 并行 同步 异步 多线程的区别

多线程的同步和互斥有啥区别

并发,并行,同步,异步的区别

C++多线程同步技巧--- 互斥体