让我们假设我正在使用Python,虽然它并不真正相关。
我有一个大数组,我想找出元素x是否在数组中。
但是,当其中一个线程找到该元素时,我希望所有其他线程都停止, 他们没有必要继续跑步。我希望继续使用主程序。
这样做的正确方法是什么? 我想在我发现该元素确实存在之后,最小化其他线程的cpu时间。
答案 0 :(得分:0)
在Python中,您可以在主线程中创建thread-safe queue并将其传递给每个工作线程。每个工作人员应在队列为empty()
时进行搜索,然后终止。如果找到结果,幸运工作者应该put()
进入队列,导致所有其他工作人员在当前迭代后停止。
示例代码(未经测试):
from Queue import Queue
from Threading import Thread
class Worker(Thread):
def __init__(self, queue):
self.queue=queue
def run(self):
while self.queue.empty():
result=search( ... )
if result:
queue.put(result)
def main():
queue=Queue()
workers=[]
for i in xrange(0,5):
workers.append(Worker(queue))
result=queue.get()
print result
答案 1 :(得分:0)
有多种方法,其中一种方法是在调用者的线程中轮询队列,其中生成的线程存储其结果。一出现第一个结果,就会终止所有正在运行的线程。
请注意,在CPython中,由于Global Interpreter Lock限制,只有一个线程可以同时运行(除非在C-extension中可以解除锁定)。还要注意,为了在大数据中搜索更合适的数据结构,应该使用数组,如二叉树。