18,772
社区成员
发帖
与我相关
我的任务
分享
//如果来新消息,主线程就轮训抢12个工作线程的fifo的锁
for( /*这里轮训12个工作线程的消息队列*/ )
{
if( pthread_mutex_trylock(&(worker->mutex)==0))
{
//如果抢到了,就把消息加入到该队列中
if( fifo_equeue(&(work->msg_fifo)), msg )
{
.....
}
}
}
//如果12个队列的锁都没有抢到,那就说明队列满了,把该消息丢掉
//子工作线程,持续抢锁,如果发现消息队列中存在消息
//就取出来,如果没有,就等待主线程将消息加入队列中
while(1)
{
pthread_mutex_lock(&(work->mutex))
//如果工作线程自己的消息队列为空
if( fifo_empty(&(work->msg_fifo) )
{
//等待主线程将消息加入队列中
pthread_cond_wait(&(work->cond), &(work->mutex))
}
//取出消息队列中的消息
while( fifo_dequeue(&(work->msg_fifo), (void**)*msg_buf[mbuf_id])==0)
{
/* 在这里最多只去100个,取完100个消息就会解锁,再去处理消息 */
}
//如果消息队列中的消息数量不到100个,那么就解锁,然后处理消息
}