跨平台线程池实现

12 篇文章 0 订阅
8 篇文章 0 订阅

           本线程池的作用是管理阻塞的网络操作函数的调用...每次网络操作调用都加入到线程池当中,然后线程回调函数执行 取任务的操作并执行这次任务。

   线程池的设计

    将线程池的所有操作都封装在类中...外界使用的话只需要new 一个这个线程池对象。

    1.加任务函数

    2.取任务函数

    3.初始化线程池

    4.销毁线程池

   线程池的实现

   实现跨平台线程池需要了解平台相关的线程库,linux一般采用posix标准的线程库(大部分使用于ios,android),windows则采用windows.h 下的线程相关函数.

   1.信号量

     为了控制线程访问,可以采用信号量来协调线程的访问线程竞争资源的顺序。

    linux 采用 sem_t ,sem_init,sem_wait,sem_post来实现

    windows采用WaitForSingleObject,ReleaseSemaphore来实现

  2.互斥锁

   linux 采用pthread_mutex_t,pthread_mutex_lock,pthread_mutex_unlock

   windows采用CRITICAL_SECTION,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection

  3.对于线程池的任务其回调函数是一直在执行操作直到线程被关闭,或者程序终止,进程终止

  4.资源的访问控制

     (1)对于信号量初始值应该将可用资源设置为0

     (2)当用户向线程池中加入task时,信号量加1,表示可用资源加1.

     (3)线程回调函数提取任务,若任务>0则提取任务并执行,若<=0则wait

  5.线程池销毁,可以在主线程中调用线程池释放资源函数并强制关闭线程池。如果线程池的生命周期是整个进程或者程序的生命周期,可以利用系统回收。

线程池的工作流程:

首先需要明确的是线程池中的竞争资源...生产资源,消费资源...在线程池中 这两者分别是,任务进队列,线程执行队列中的任务,这里就设置两个资源标识,A代表生产任务线程,B代表执行任务线程。 采用信号量来同步多个线程(linux 和windows 与 移动平台 线程同步方式不同,移动平台不能直接使用sem_t ,平台不支持)生产资源时需要等待 可用的线程来生产资源,  资源队列需要加锁,消费资源时需要等待生产任务线程。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值