📄 9_2_3 多任务下的垃圾收集 - 《多任务下的数据结构与算法》 - 免费试读 - book_csdn_net.htm
字号:
lang=EN-US>
</SPAN><SPAN lang=EN-US>/* </SPAN><SPAN
style="FONT-FAMILY: 华康简宋">用来保护引用计数读写及哈希表操作的锁</SPAN><SPAN lang=EN-US>
*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">HASHTABLE *g_pMTable</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">/* </SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">多任务哈希表指针</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> */</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.3pt"><STRONG><SPAN lang=EN-US>INT MGC_Init(INT
nBucketCount)</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> g_lock =
LockCreate()</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> if ( g_lock !=
NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
g_pMTable = HashTable_Create(nBucketCount)</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
if ( g_pMTable != NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
return CAPI_SUCCESS</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
else</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
HashTable_Destroy(g_pMTable, NULL)</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> return
CAPI_FAILED</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">}</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US>/**
</SPAN><SPAN style="FONT-FAMILY: 华康简宋">多任务下的垃圾内存收集算法的内存分配函数</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @param
size_t size</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">要分配的内存大小,以字节为单位</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> </SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @return
void *</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">成功返回分配到的内存地址</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">失败返回</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">NULL</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 9pt">void *MGC_Malloc(size_t size)</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> void *p =
malloc( size + INT_LEN )</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> if ( p == NULL
)</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> {</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
MGC_Collect()</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
p = malloc( size + INT_LEN )</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
if ( p == NULL )</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
return NULL</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
}</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> }</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
Lock(g_lock)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
HashTable_Insert( g_pMTable, p, HashInt)</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> *((INT *)p) =
0</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
Unlock(g_lock)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> return (void
*)((char *)p + INT_LEN )</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">}</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US>/**
</SPAN><SPAN style="FONT-FAMILY: 华康简宋">多任务下的垃圾内存收集算法的内存释放函数</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @param
void *p</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">要释放的内存地址</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @return
void</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">无</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> </SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 9pt">void MGC_Free(void *p)</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> void *pFree =
(void *)((char *)p</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">-</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">INT_LEN)</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.3pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
free(pFree)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.8pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">}</SPAN></P>
<P class=4 style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US>/**
</SPAN><SPAN style="FONT-FAMILY: 华康简宋">多任务下的垃圾内存收集算法的手工释放内存函数</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @param
void *p</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">要释放的内存地址</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">
</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> @return
void</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.2pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋; LETTER-SPACING: -0.1pt">—</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">无</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> </SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">*/</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><STRONG><SPAN lang=EN-US
style="FONT-SIZE: 9pt">void MGC_ManualFree(void *p)</SPAN></STRONG></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt">{</SPAN></P>
<P class=MsoNormal style="LINE-HEIGHT: 14.5pt"><SPAN lang=EN-US
style="FONT-SIZE: 9pt"> void *pFree =
(void *)((char *)p</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 华康简宋">-</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt">INT_LEN)</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">;</SPAN></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -