线程池大致情况: 下面的代码没用c++封装,可自行封装,只提供了3个函数 :创建 , 添加任务, 停止并销毁线程池;
思路:
先起N个线程 ( _beginthreadex / pthread_create) ,问题是用什么办法先让这些线程暂停 , 并且让这些线程得到通知后再
执行某个函数呢?
下面的实现是用条件变量, 每次调用添加任务就发送一个信号 , 一旦某个线程抢占到 去某个[ 队列 ]中拿取一个任务执行.
这个队列可以是一个链表,也可以是一个dequeue , 具体自己看着办. 下面的实现使用链表
那么队列中存放什么 ? 一个函数 , 一个函数参数 , 一个 next 指针 ( 链表中需要使用到)
#include "stdafx.h"
#include <process.h>
#include <Windows.h>
#define SPINCOUNT 4000 // win32下使用, unix下无视即可
//一个任务, 用于存要执行的函数
typedef struct _task
{
//可随意定义一个在线程中执行的函数,这种函数比较万用,就暂时先这么定义;
void *(*pFunc)(void *arg);
//函数参数
void * arg;
//下一个任务
struct _task * next;
}thread_task;
typedef struct _thread_pool
{
//unix 下 pthread_mutex_t mutex; win32 下用关键段代替 mutex
CRITICAL_SECTION cs;
//unix 下 pthread_cond_t cond;
CONDITION_VARIABLE cond;
//一个任务链表 , 指向链表头 , 也可用 dequeue 替换
thread_task * queue;
/