0

这是我的代码: void playerproc(int player) {

         switch(player)
         {
                 case 1:
                         move=(numSticks+4)%5;
                         return move;
                 break;
                 case 2:
                         srand(5);
                         move=(rand()%4)+1;
                         return move;
         }
 }

 void nimmanager(int numStick)
 {
         numSticks=numStick;
         int player;
         Thread *t=new Thread("Players");
         while(numSticks!=0)
         {
                 player=1;
                 int move=t->Fork(playerproc,player);
                 numSticks-=move;
                 printf("Name of the player: %d\nNumber of sticks taken:%d\nNumber of sticks left=%d",player,move,numSticks);
                 player=2;
                 int move=t->Fork(playerproc,player);
                 numSticks-=move;
                 printf("Name of the player: %d\nNumber of sticks taken:%d\nNumber of sticks left=%d",player,move,numSticks);

         }
         printf("Winner is player 1");
 }

这是 NIM 游戏的代码。现在我想从方法 playerproc(我使用 fork() 生成)返回值,并在方法 NIM 管理器中获取它的返回值。我无法得到它。我正在使用 NachOs。

4

1 回答 1

0

我认为您应该查看 /threads/thread.cc 中的 Fork(...) 源代码。当我使用 NACHOS 时,我总是在源代码中找到答案。

Fork(...) 返回无效。除非您将函数的返回值设为全局变量,否则您应该无法访问它。Fork(...) 正在分配一个新堆栈并添加一个线程来运行该函数到就绪队列。因此,函数的返回变量的范围仅限于该函数。

为什么你要为 playerproc() 函数分叉线程?多线程在这里没有多大意义,因为您的主线程必须等待 playerproc() 无论如何返回才能继续。

于 2013-10-18T17:36:40.187 回答