void queue_block_until_needed(PacketQueue audioq, PacketQueue videoq) { pthread_mutex_t *audioq_mutex; audioq_mutex = queue_get_mutex(audioq); pthread_mutex_lock(audioq_mutex); if (queue_get_size(audioq) > MAX_QUEUED_PACKETS && queue_get_size(videoq) > MAX_QUEUED_PACKETS) pthread_cond_wait(&is_full, audioq_mutex); pthread_mutex_unlock(audioq_mutex); }
void *producer(void *arg) { while(1) { pthread_mutex_lock(&mutex); while(queue_get_size(&Q) >= BUFFERSIZE) { pthread_cond_wait(&empty, &mutex); } int data = rand()%100; queue_push(&Q, data); printf("producer a data: %d\n", data); pthread_cond_signal(&full); pthread_mutex_unlock(&mutex); sleep(3); } }
static inline int64_t coremu_intr_get_size(CMCore *core) { return queue_get_size(core->intr_queue); }
bool queue_is_empty(Queue *queue){ return (0 == queue_get_size(queue)) && (queue_get_head(queue) == queue_get_tail(queue)); }
size_t thread_pool_get_size_of_queue(pool_t *pool) { return queue_get_size(&pool->queue_); }