POSIX和CMSIS接口适配层解读adapter(2):thread/memory/time

一、前言

本文针对thread_adapter、memory_adapter、time_adapter部分进行解读,也是samgr/adapter下关于POSIX和CMSIS的最后一部分代码。

二、头文件分析

  • thread_adapter
    在samgr\adapter\thread_adapter.h中对线程的操作进行声明。
typedef void *(*Runnable)(void *argv);     //函数指针
typedef struct ThreadAttr ThreadAttr;
struct ThreadAttr {
    const char *name;   // name of the thread  线程名
    uint32 stackSize;   // size of stack       栈大小
    uint8 priority;     // initial thread priority 优先级
    uint8 reserved1;    // reserved1 (must be 0)  预留
    uint16 reserved2;   // reserved2 (must be 0)
};
MutexId MUTEX_InitValue(void);//申请锁
void MUTEX_Lock(MutexId mutex);//加锁
void MUTEX_Unlock(MutexId mutex);//解锁
//保障计算进程中创建线程个数的线程安全
void MUTEX_GlobalLock(void);//加锁
void MUTEX_GlobalUnlock(void);//解锁
ThreadId THREAD_Create(Runnable run, void *argv, const ThreadAttr *attr);//创建线程
int THREAD_Total(void);//获取线程总数
void *THREAD_GetThreadLocal(void);//获取线程存储的值
void THREAD_SetThreadLocal(const void *local);//记录local值
  • memory_adapter

在samgr\adapter\memory_adapter.h中对分配内存的操作进行声明。

void *SAMGR_Malloc(uint32 size);//分配size大小的内存
void SAMGR_Free(void *buffer);//释放buffer指向的缓冲区
  • time_adapter

在samgr\adapter\time_adapter.h中对时间相关的操作进行声明。

int32 WDT_Start(uint32 ms);//开始
int32 WDT_Reset(uint32 ms);//重置
int32 WDT_Stop(void);//停止
uint64 SAMGR_GetProcessTime(void);//获取时间

三、函数实现分析

在samgr\adapter\posix\thread_adapter.c中实现POSIX的线程操作。

#define PRI_BUTT 39
#define MIN_STACK_SIZE 0x8000
static int g_threadCount = 0;                              //记录线程数,注意在线程被释放的时候应减1
static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;//静态初始化锁,用于保障当前进程线程数量的计数
static pthread_key_t g_localKey = -1;                      //类似线程的全局变量
static pthread_once_t g_localKeyOnce = PTHREAD_ONCE_INIT;  //保障pthread_once中调用的函数只执行一次
//申请一个已初始化的锁
Mu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值