⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds_safeq.c

📁 Coda分布式文件系统源代码。其特色在于可以支持离线文件操作以及在线后的自动更新
💻 C
字号:
/* * ds_safeq.c: implementation of ds_safeq_t */#include <stdlib.h>#include <odytypes.h>#include <lwp.h>#include <lock.h>#include "ds_list.h"#include "ds_safeq.h"#include "ds_safeq.private.h"/* magic numbers */const magic_t ds_safeq_magic = 1574524372;boolds_safeq_valid(ds_safeq_t *q) {    if (DS_SAFEQ_VALID(q))	return TRUE;    else 	return FALSE;}ds_safeq_t *ds_safeq_create() {    ds_safeq_t *result;    ALLOC(result,ds_safeq_t);    result->sq_magic = ds_safeq_magic;    Lock_Init(&result->sq_lock);    result->sq_list = ds_list_create(NULL, FALSE, TRUE);    CODA_ASSERT(result->sq_list);        return result;}voidds_safeq_destroy(q)    ds_safeq_t *q;{    CODA_ASSERT(DS_SAFEQ_VALID(q));    ObtainWriteLock(&q->sq_lock);    /* Make sure we do not yeild... */    q->sq_magic = 0;    ds_list_destroy(q->sq_list);    /* XXX - do we want to leve the lock locked? */    ReleaseWriteLock(&q->sq_lock);    FREE(q);}voidds_safeq_enq(q, i)    ds_safeq_t *q;    void       *i;{    CODA_ASSERT(DS_SAFEQ_VALID(q));    ObtainWriteLock(&q->sq_lock);    CODA_ASSERT(ds_list_insert(q->sq_list,i) == i);    LWP_NoYieldSignal(&q->sq_signal);    ReleaseWriteLock(&q->sq_lock);}void *ds_safeq_deq(q)    ds_safeq_t *q;{    void *result;    while (1) {	CODA_ASSERT(DS_SAFEQ_VALID(q));	ObtainWriteLock(&q->sq_lock);	result = ds_list_get_first(q->sq_list);	ReleaseWriteLock(&q->sq_lock);	if (!result) {	    LWP_WaitProcess(&q->sq_signal);	} else {	    break;	}    }    return result;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -