2013-11-29 38 views
0

如何查看以下代码的输出?未给出输出的CML代码

fun daughter() = let 
      val daughter_tid = getTid(); 
      in 
      print ("DAUGHTER : my tid = "^(tidToString daughter_tid)^"\n") 
      end; 
fun mother() = 
     let 
      val mother_tid = getTid(); 
      val daughter_tid = spawn daughter; 
     in 
      print("MOTHER : my Tid = "^(tidToString mother_tid)^"Daughter's tid = "^(tidToString daughter_tid)^"\n") 
     end; 

     RunCML.doit(mother, SOME(Time.fromMilliseconds 10)); 

代码编译罚款和假设如下,以提供输出:

DAUGHTER : my tid = [0004] 
MOTHER : my tid [0003] DAUGHETR's Tid = [0004] 

回答

1

必须使用TextIO.print,而不是print得到正确的输出。如果没有这样的明确引用,编译CML版本的TextIO时不会加载,并且打印函数解析为SML/NJ版本;由于此版本的打印不是线程安全的,因此会出现问题。你可以看到CML FAQ了解更多细节。