跨平台线程池实现

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

   线程池的设计

    将线程池的所有操作都封装在类中...外界使用的话只需要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 ,平台不支持)生产资源时需要等待 可用的线程来生产资源,  资源队列需要加锁,消费资源时需要等待生产任务线程。


阅读更多
想对作者说点什么? 我来说一句

C语言跨平台线程池任务池库

2015年01月08日 205KB 下载

sn_threadpool(跨平台线程池)

2012年07月05日 2.89MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭