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

Multithreading 运行时错误多处理互斥-进程同步,multithreading,winapi,process,multiprocessing,mutex,Multithreading,Winapi,Process,Multiprocessing,Mutex,我试图解决经典的哲学家进餐问题。用餐哲学家问题指出,K位哲学家围坐在一张圆桌旁,每对哲学家之间各有一根筷子。每个哲学家之间都有一根筷子。哲学家可以吃东西,只要他能拿起旁边的两根筷子。一根筷子可以被任何一个相邻的跟随者捡起,但不能同时被两个跟随者捡起。我试图用多重处理来解决这个问题,这意味着每根筷子都是互斥的,每一位哲学家都是一个过程 HANDLE forks[NUMBER_OF_FORKS]; int main() { STARTUPINFO si[NUMBER_OF_PHILOSOP

我试图解决经典的哲学家进餐问题。用餐哲学家问题指出,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);
    }
}
手柄叉[叉的数量];
int main()
{
STARTUPINFO si[哲学家的数量];//哲学家的数量是5
处理信息pi[哲学家的数量];//哲学家的数量为5
initForks(哲学家的数量);//初始化所有互斥对象的函数
std::字符串参数;
LPWSTR试验;
for(int i=0;i<哲学家的数量;i++)
{
零内存(&si[i],sizeof(si[i]);
si[i].cb=sizeof(si[i]);
零内存(&pi[i],sizeof(pi[i]);
//将参数转换为LPWSTR(参数表示哲学家的编号)。
param=std::to_字符串(i);
测试=转换字符串(参数);
如果(!CreateProcess(L).\\Debug\\phisor.exe),test,NULL,NULL,FALSE,0,NULL,NULL,&si[i],&pi[i]))
{

std::cout从图像中可以看出

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.