怎么开发一个网络协议模块(C语言框架)之(四) 信号量初始化
// 原始代码
/* gVrrpInstance.sem = OsixCreateBSem(OSIX_SEM_Q_PRIORITY, OSIX_SEM_FULL); */
gVrrpInstance.sem = OsixCreateMSem(OSIX_SEM_Q_FIFO | OSIX_SEM_DELETE_SAFE);
if (gVrrpInstance.sem == NULL)
{printf("[VRRP]:vrrp init error, failed to create vrrp global sem.\r\n");goto ERROR_RETURN;
}
🚦 一、信号量作用
信号量用于:
-
控制多线程/中断对共享资源的访问。
-
VRRP 模块可能有多个线程:
-
定时器线程
-
socket 接收线程
-
CLI 或配置下发线程
-
-
全局变量(如
gVrrpInstance.operUsedTbl
、avl树
)是共享资源,需加锁防止竞态条件。
二、OsixCreateMSem 是什么?
这是平台层 OS 适配接口的