ee.h

#ifndef EE_H
#define EE_H
#include "../config.h"

#include <unistd.h>
#include <pthread.h>
#include "../sysdeps.h"

//此头文件提供线程库对ort的支持
//线程库只会提供两只类型:othr_lock_t和othr_key_t,嵌套锁类型不会在线程库外使用

//嵌套锁类型结构体,只在线程库内部使用
typedef struct {
  pthread_mutex_t lock;//互斥量
  pthread_mutex_t ilock;//访问互斥量,访问此结构体前需获得此锁
  pthread_cond_t  cond;//条件变量,用于通知其他task可以对此嵌套锁上锁
  int             count;//同一个task对此嵌套锁的上锁次数
  void           *owner;//此嵌套锁的属主,是一个指向ort_task_node_t结构体的指针
} othr_nestlock_t;

//线程库锁类型
typedef union {
  struct {
    int   type;//锁类型:可以取三种不同的值,通用锁/嵌套锁/自旋锁
    union {
      pthread_mutex_t normal;//通用锁
      othr_nestlock_t nest;//嵌套锁
      struct {//自旋锁
        int             rndelay;//存储初始时延,在setlock中使用
        pthread_mutex_t mutex;
      } spin;
    } data;//锁数据
  } lock;//锁
  char padding[CACHE_LINE];//用于防止伪共享
} othr_lock_t;



//初始化全局内部控制变量和线程库性能参数,初始化ICVs副本,设置线程栈大小,创建默认数目的线程池节点并让其自旋
extern int  othr_initialize(int *argc, char ***argv, ort_icvs_t *icv, ort_caps_t *cap);
//此函数没有做任何事情
extern void othr_finalize(int exitvalue);
//申请numthr个线程,level为子线程的level,返回的数目可能小于申请的数目
extern int  othr_request(int numthreads, int level);
//取下numthreads个线程池节点,解开自旋,arg指向eecb,info为eecb的info
extern void othr_create(int numthreads, int level, void *arg, void **info);
//等待所有子线程结束,将结束了的线程送回线程池,info为eecb的info
extern void othr_waitall(void **info);
//将当前线程放到就绪队列末
#define othr_yield() sched_yield()


//#define USE_TLS
//线程库键类型定义
#define othr_key_t            pthread_key_t
//创建线程库键,参数a为键,b为键的销毁函数(一般为空)
#define othr_key_create(a,b)  pthread_key_create(a,b)
//获取指定的键
#define othr_getspecific(a)   pthread_getspecific(a)
//设置键的值
#define othr_setspecific(a,b) pthread_setspecific(a,b)

//初始化给定的锁为给定的type类型
extern int  othr_init_lock(othr_lock_t *lock, int type);
//销毁给定的锁
extern int  othr_destroy_lock(othr_lock_t *lock);
//对给定的锁上锁
extern int  othr_set_lock(othr_lock_t *lock);
//对给定的锁解锁
extern int  othr_unset_lock(othr_lock_t *lock);
//尝试对给定的锁上锁,返回1时表示尝试上锁成功,否则表示失败
extern int  othr_test_lock(othr_lock_t *lock);

#endif // EE_H

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值