使用Eiffel的可用处理器数量

时间:2012-11-15 14:18:01

标签: eiffel

我正在玩Eiffels SCOOP。

在我的程序中,一群工人并行运行。我想为我创建尽可能多的工作人员。

在Eiffel中是否有“简单”的方式来查找可用处理器的数量?

1 个答案:

答案 0 :(得分: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