首页 > 代码库 > OSIP中的多线程宏定义#ifdef OSIP_MT

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;
}

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