OSIP中的多线程宏定义#ifdef OSIP_MT

OSIP在定义多线程的时候,需要添加锁,如果没有使用到多线程,就没有使用到锁的功能。

文件代码:osip_fifo.h

/**
 * Structure for referencing a fifo.
 * @var osip_fifo_t
 */
  typedef struct osip_fifo osip_fifo_t;

/**
 * Structure for referencing a fifo.
 * @struct osip_fifo
 */
  struct osip_fifo
  {
#ifdef OSIP_MT
    struct osip_mutex *qislocked;  /**@internal */
    struct osip_sem *qisempty;     /**@internal */
#endif
    osip_list_t queue;             /**< list of nodes containing elements */
    int nb_elt;                    /**< nb of elements */
    osip_fifo_state state;           /**@internal state of the fifo */
  };

文件代码:port_fifo.c

int
osip_fifo_size (osip_fifo_t * ff)
{
  int i;

#ifdef OSIP_MT
  osip_mutex_lock (ff->qislocked);
#endif

i = osip_list_size (&ff->queue);
#ifdef OSIP_MT
  osip_mutex_unlock (ff->qislocked);
#endif
  return i;
}

从上面的代码可以看出,如果是多线程就需要定义宏,使得多线程访问互斥生效。但是在编写的过程中,会导致所有的函数在访问变量的时候,必须带上宏,然后加锁,然后解锁,对于代码非常的不清爽。

OSIP中的多线程宏定义#ifdef OSIP_MT,布布扣,bubuko.com

时间: 2024-10-21 17:12:42

OSIP中的多线程宏定义#ifdef OSIP_MT的相关文章

IOS开发中常用的宏定义

有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 #define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] ) 2. 判断当前设备是不是iPhone5 #define kScreenIphone5 (([[UIScreen main

iOS中常用的宏定义

1.处理NSLog事件(开发者模式打印,发布者模式不打印) 1 2 3 4 5   #ifdef DEBUG   #define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS

iOS 开发中规范的宏定义,基本常用的宏定义整理集锦。分享给大家!

1 #ifndef MacroDefinition_h 2 #define MacroDefinition_h 3 //AppDelegate 4 5 #define APPDELEGATE [(AppDelegate*)[UIApplication sharedApplication] delegate] 6 //----------------------系统设备相关---------------------------- 7 //获取设备屏幕尺寸 8 #define SCREEN_WIDT

IOS开发,知识点小结,ios开发中常用的宏定义总结

IOS开发,从应用跳转到用浏览器打开网页: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.oatos.com/bbs/"]]; 用一个Button覆盖整个cell,添加动作 cell.accessoryType = UITableViewCellAccessoryNone; UIButton *btn = [[UIButton alloc] initWithFrame:CGRec

当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

一.结构体中可以定义一般的宏定义 如: struct aaa{   #define STATUS_1 100   #define STATUS_2 200   #define STATUS_3 300   ........}: 首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的.   一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告.可是如果不在结构体之内,名字重复可肯定是error.(未证实,可以做实验,而且可以把两处的

ios 开发中常用的宏定义 --欢迎补充

// // CommonMacroDefinition.h // LearnThread // // Created by Marico Sun in Beijing on 16/7/4. // Copyright © 2016年 QL. All rights reserved. // //判断是否要Log 可以打印文件名 函数名 行数 #ifdef NEED_DEBUG #define NSLog(format, ...) //Log定义... #else #define NSLog(form

c语言中的宏定义的学习体会

在学习stm32的过程中遇到关于宏定义的问题,所以,写出来大家一起学习一下 问题出处: 其中\是语言中的转义字符,用来连接上下文,因为宏定义只能是一个串,而当你的串过长(超过一行的时候)时,就需要换行了,此时就需要\来连接上下文. 下面是成熟软件中常用到的宏定义: 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef 

do{}while(0)在宏定义中作用

在开源代码中看到,宏定义经常这样用 #define some() do { do_somt_thing(); } while (0) 为什么这样用? 可以试一下,假如一个普通宏定义 #define some(x) Fun1(x);Fun2(x) if(condition) some(x); 变为 if(condition) Fun1(x); Fun2(x); 这样直接加个花括号不久行了,为什么还用do......while()?假如加上花括号 #define some(x) {Fun1(x);F

完美单例宏定义(兼容ARC和MRC),项目中可以直接使用

 单例模式: 1.永远只分配一块内存来创建对象 2.提供一个类方法, 返回内部唯一的一个对象(一个实例) 3.最好保证init方法也只初始化一次 ARC下单例的常规写法(代码中的\是宏定义的写法): static id _instance; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [super al