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