相关疑难解决方法(0)

Lua协同程序甚至适用于什么?为什么这段代码不像我期望的那样工作?

我无法理解这段代码......我期待类似于线程的东西,我会得到一个输出随机的"nooo"和"yaaaay"互相穿插,因为它们都是异步打印,而是我发现主线程似乎阻止第一次调用coroutine.resume(),从而防止下一个被启动,直到第一个产生.

如果这是预期的操作协同程序,它们有什么用处,我将如何实现我希望的目标?我是否必须为这些协同程序实现我自己的调度程序才能异步操作?因为这看起来很混乱,我也可以使用函数!

co1 = coroutine.create(function ()
        local i = 1
        while i < 200 do
                print("nooo")
                i = i + 1
        end
        coroutine.yield()
end)

co2 = coroutine.create(function ()
        local i = 1
        while i < 200 do
                print("yaaaay")
                i = i + 1
        end
        coroutine.yield()
end)

coroutine.resume(co1)
coroutine.resume(co2)
Run Code Online (Sandbox Code Playgroud)

lua multithreading coroutine

33
推荐指数
3
解决办法
2万
查看次数

C++中的递归生成器

我有一个size = N的向量,其中每个元素我可以有从0到possible_values [i] -1的值.我想做一个函数,迭代我所有这些值.

我能够使用递归生成器在Python中执行此操作:

def all_values(size,values,pos=0):
    if pos == size:
        yield []
    else:    
        for v in xrange(values[pos]):
            for v2 in all_values(size,values,pos+1):
                v2.insert(0,v)
                yield v2

possible_values=[3,2,2]
for v in all_values(3,possible_values):
    print v
Run Code Online (Sandbox Code Playgroud)

示例输出:

[0, 0, 0]
[0, 0, 1]
[0, 1, 0]
[0, 1, 1]
[1, 0, 0]
[1, 0, 1]
[1, 1, 0]
[1, 1, 1]
[2, 0, 0]
[2, 0, 1]
[2, 1, 0]
[2, 1, 1]
Run Code Online (Sandbox Code Playgroud)

由于C++没有Python的产量,我不知道在C++中实现它的正确方法是什么.

可选问题:有没有更好的方法在Python中实现它?

c++ python recursion iterator generator

6
推荐指数
1
解决办法
505
查看次数

标签 统计

c++ ×1

coroutine ×1

generator ×1

iterator ×1

lua ×1

multithreading ×1

python ×1

recursion ×1