11.10.6 函数锁定

有时需要将函数锁定在内存中,可使用 mlock 函数实现。这通常用于包含某些初始化代码的动态链接函数(oct-文件或 mex-文件),以防止调用 clear 时移除这些初始化内容。

例如:

function my_function ()
  mlock ();
  ...
endfunction

上述代码阻止了 my_function 在被调用后从内存中移除,即使调用了 clear 也是如此。可以使用 mislocked 判断函数是否已锁定在内存中,并使用 munlock 解锁函数,如下列代码所示:

my_function ();
mislocked ("my_function")
⇒   ans = 1
munlock ("my_function");
mislocked ("my_function")
⇒   ans = 0

mlock 的一个常见用途是防止持久变量从内存中被移除,如下例所示:

function count_calls ()
  mlock ();
  persistent calls = 0;
  printf ("count_calls() has been called %d times\n", ++calls);
endfunction

count_calls ();
-| count_calls() has been called 1 times

clear count_calls
count_calls ();
-| count_calls() has been called 2 times

mlock 还可用于防止在外部编辑器中对 m 文件的修改影响当前 Octave 会话;ignore_function_time_stamp 函数可实现类似的效果。

 
mlock ()

将当前函数锁定到内存中,使其无法通过 clear 移除。

另请参阅: munlock, mislocked, persistent, clear.

 
munlock ()
munlock (fcn)

解锁指定的函数 fcn,使其可以通过 clear 从内存中移除。

如果未指定函数名,则解锁当前函数。

另请参阅: mlock, mislocked, persistent, clear.

 
tf = mislocked ()
tf = mislocked (fcn)

如果指定的函数 fcn 已锁定在内存中,则返回真(true)。

如果未指定函数名,则当当前函数已锁定时返回真(true)。

另请参阅: mlock, munlock, persistent, clear.


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4