Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Ruby的功能';s线程#连接(0)?_C_Ruby_Multithreading - Fatal编程技术网

C Ruby的功能';s线程#连接(0)?

C Ruby的功能';s线程#连接(0)?,c,ruby,multithreading,C,Ruby,Multithreading,因此,我们正在尝试调试我们的应用程序的一个问题,我们认为我们已经将其缩小到线程问题 根据Ruby关于线程的文档,我了解到为join方法提供一个整型参数可以指定在返回nil之前等待线程连接的时间 但是,我不确定传入“0”时会发生什么 我的一位同事,在为Ruby解释器研究了C代码之后,似乎认为它不是“根本不等待,立即加入它,如果它没有回来,则返回nil”,而是更接近于“不必麻烦加入,只需在给定时刻返回线程的快照” 有人能给我指一些文档(或者干脆告诉我)把“0”参数传递给join()做什么吗?你的同事

因此,我们正在尝试调试我们的应用程序的一个问题,我们认为我们已经将其缩小到线程问题

根据Ruby关于线程的文档,我了解到为join方法提供一个整型参数可以指定在返回nil之前等待线程连接的时间

但是,我不确定传入“0”时会发生什么

我的一位同事,在为Ruby解释器研究了C代码之后,似乎认为它不是“根本不等待,立即加入它,如果它没有回来,则返回nil”,而是更接近于“不必麻烦加入,只需在给定时刻返回线程的快照”


有人能给我指一些文档(或者干脆告诉我)把“0”参数传递给join()做什么吗?

你的同事是正确的。请尝试以下代码,例如:

y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0)
并与:

y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
puts "Waiting" until y.join(0.15)

请参见Diego Basch测试代码后的内容:

def f()
  y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
  puts "Waiting" until y.join(0)
end

def g()
  y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
  puts "Waiting" until y.join(0.0000000000001)
end

def h()
  y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
  puts "Waiting" until y.join(0.15)
end
f
g
非常相似。 这是因为f只是一个极限——尽可能地放在一个小的数字里。 他们的意思是一样的。立即检查线程是否完成。如果不是,则返回nil

因此,在上面的代码中,直到在前两种情况下重复求值,但在第三种情况下仅求值几次(特别是每0.15秒)。使用0作为参数的功能与其他数字完全相同——检查线程是否在接下来的0秒内完成(现在),以及是否返回nil


恐怕你的同事说的不对。

join的文档是我首先要问这个问题的原因。目前还不清楚在传递>0 int还是0 int时是否存在差异(如果有)。您上面的代码似乎表明,将0作为参数传递只是“立即联接”,并且不会像我的同事所建议的那样返回线程(线程对象)的快照。没有差异,否则它会明确地说。