4

我在玩 Eiffels SCOOP。

在我的程序中,一群工人并行运行。我想创建尽可能多的工人,因为处理器可供我使用。

埃菲尔是否有“简单”的方法来查找可用处理器的数量?

4

1 回答 1

3

当前的标准库中没有这样的功能。但是,您可以使用以下内容:

frozen available_cpus: NATURAL_8
        -- Number of logical CPUs reported by OS.
    external
        "C inline use %"eif_scoop.h%""
    alias
        "[
            #ifdef EIF_WINDOWS
                SYSTEM_INFO sysinfo;
                GetSystemInfo (&sysinfo);
                return sysinfo.dwNumberOfProcessors;
            #elif EIF_MACOSX
                int nm [2];
                size_t len = 4;
                uint32_t count;

                nm [0] = CTL_HW; nm [1] = HW_AVAILCPU;
                sysctl (nm, 2, &count, &len, NULL, 0);

                if(count < 1) {
                    nm[1] = HW_NCPU;
                    sysctl(nm, 2, &count, &len, NULL, 0);
                    if (count < 1) {count = 1;}
                }
                return count;
            #else
                return sysconf (_SC_NPROCESSORS_ONLN);
            #endif
        ]"
    end
于 2012-11-15T18:46:44.213 回答