应用程序必须调用 lgrp_init(3LGRP),才能使用 API 遍历 lgroup 分层结构并搜索 lgroup 分层结构的内容。调用 lgrp_init() 可为应用程序提供 lgroup 分层结构的一致快照。应用程序开发者可以指定快照仅包含专供调用线程使用的资源,或包含一般情况下操作系统均可使用的资源。lgrp_init() 函数返回一个 cookie,此 cookie 用于执行以下任务:
导航 lgroup 分层结构
确定 lgroup 的内容
确定快照是否最新
lgrp_init() 函数初始化 lgroup 接口并获取 lgroup 分层结构的快照。
#include <sys/lgrp_user.h> lgrp_cookie_t lgrp_init(lgrp_view_t view);
如果 lgrp_init() 函数是使用 LGRP_VIEW_CALLER 作为视图进行调用的,则此函数返回的快照仅包含可供调用线程使用的资源。如果 lgrp_init() 函数是使用 LGRP_VIEW_OS 作为视图进行调用的,则此函数返回的快照将包含可供操作系统使用的资源。如果线程成功调用 lgrp_init() 函数,则此函数将返回一个 cookie,与 lgroup 分层结构进行交互的任何函数均使用此 cookie。当线程不再需要此 cookie 时,将使用此 cookie 作为参数来调用 lgrp_fini() 函数。
lgroup 分层结构包括一个根 lgroup,其中包含计算机的所有 CPU 和内存资源。根 lgroup 可以包含其他由更小延迟限定的地址组。
lgrp_init() 函数可以返回两个错误。如果视图无效,则此函数将返回 EINVAL。如果没有足够的内存用于分配 lgroup 分层结构的快照,则此函数将返回 ENOMEM。
lgrp_fini(3LGRP) 函数终止给定 cookie 的使用,并释放相应的 lgroup 分层结构快照。
#include <sys/lgrp_user.h> int lgrp_fini(lgrp_cookie_t cookie);
lgrp_fini() 函数使用表示由先前的 lgrp_init() 调用创建的 lgroup 分层结构快照的 cookie。lgrp_fini() 函数释放分配给此快照的内存。调用 lgrp_fini() 之后,此 cookie 即失效。请不要再使用此 cookie。
如果传递给 lgrp_fini() 函数的 cookie 无效,则 lgrp_fini() 将返回 EINVAL。