小熊科技|linux c编程之高效线程池如何实现无琐化( 二 )


do {work = NULL;if (thread_queue_len(thread) <= 0)//also atomicbreak;tmp = thread->out;//prefetch workwork = } while (!__sync_bool_compare_and_swap(if (work) {// do something在线程的动态减少后 , 原先线程上未能执行完的任务只需要由//主线程再次根据任务调度算法重新分配至其他存活的工作者线程队列中即可 , 不//存在上述问题 , 当然 , 此时可以同时执行负载均衡算法加以优化 。 }(4) 环形队列
源码中环形队列实现主要参考了linux内核中kfifo的实现 , 如下图所示:
小熊科技|linux c编程之高效线程池如何实现无琐化队列长度为2的整次幂 , out和in下标一直递增至越界后回转 , 其类型为unsigned int , 即out指针一直追赶in指针 , out和in映射至FiFo的对应下标处 , 其间的元素即为队列元素 。


推荐阅读