alias NTHREADS = 4

fn xyz(A: UnsafePointer[Float32], B: UnsafePointer[Float32], nc:Int):
    B.store(nc, A.load(nc))

fn main():
    var A = UnsafePointer[Float32].alloc(4)
    var B = UnsafePointer[Float32].alloc(4)

    for i in range(4):
        A[i] = i
        B[i] = 1

    print("Before:")
    print("A:", A.load[width=4](0))
    print("B:", B.load[width=4](0))

    @parameter
    fn parallel_xyz(thread_id: Int):
        # print(thread_id)
        xyz(A + (thread_id), B + (thread_id), thread_id)
    
    total_items = 4
    parallelize[parallel_xyz] (total_items, NTHREADS)

    # print("After:")
    # print("A:", A.load[width=4](0))
    # print("B:", B.load[width=4](0))

我收到以下输出错误:

Before:
A: [0.0, 1.0, 2.0, 3.0]
B: [1.0, 1.0, 1.0, 1.0]
[24010:24010:20241114,152857.053919:ERROR elf_dynamic_array_reader.h:64] tag not found
[24010:24010:20241114,152857.054009:ERROR elf_dynamic_array_reader.h:64] tag not found
[24010:24010:20241114,152857.054422:ERROR elf_dynamic_array_reader.h:64] tag not found
[24010:24010:20241114,152857.054484:ERROR elf_dynamic_array_reader.h:64] tag not found
Please submit a bug report to https://github.com/modularml/mojo/issues and include the crash backtrace along with all the relevant source codes.
mojo crashed!
Please file a bug report.

但如果我取消注释最后三行代码,它就可以正常工作。有人能帮忙吗

这似乎是我们仍然遇到的一个问题,因为闭包不会延长变量的生命周期。您必须在调用 parallelize 后手动丢弃变量

parallelize[...](...)
_ = A^
_ = B^

而且,在使用指针后你并没有释放它,如果这个指针被另一个函数调用,那么就会发生内存泄漏。在这个例子中,一旦程序结束,内存就会被释放,但在更大的代码库中,这将导致问题。