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