易截截图软件、单文件、免安装、纯绿色、仅160KB

一个Linux下C线程池的实现

      什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。
   下面是Linux系统下用C语言创建的一个线程池。线程池会维护一个任务链表(每个CThread_worker结构就是一个任务)。
   pool_init()函数预先创建好max_thread_num个线程,每个线程执thread_routine ()函数。该函数中
   1. while (pool->cur_queue_size == 0)
   2. {
   3.        pthread_cond_wait (&(pool->queue_ready),&(pool->queue_lock));
   4. }
表示如果任务链表中没有任务,则该线程出于阻塞等待状态。否则从队列中取出任务并执行。
 
   pool_add_worker()函数向线程池的任务链表中加入一个任务,加入后通过调用pthread_cond_signal (&(pool->queue_ready))唤醒一个出于阻塞状态的线程(如果有的话)。
 
   pool_destroy ()函数用于销毁线程池,线程池任务链表中的任务不会再被执行,但是正在运行的线程会一直把任务运行完后再退出。
下面贴出完整代码
   1. #include <stdio.h>
   2. #include <stdlib.h>
   3. #include <unistd.h>
   4. #include <sys/types.h>
   5. #include <pthread.h>
   6. #include <assert.h>
   7.
   8. /*
   9. *线程池里所有运行和等待的任务都是一个 CThread_worker
  10. *由于所有任务都在链表里,所以是一个链表结构
  11. */
  12. typedef struct worker
  13. {
  14.     /*回调函数,任务运行时会调用此函数,注意也可声明成其它形式*/
  15.     void *(*process) (void *arg);
  16.     void *arg;/*回调函数的参数*/
  17.     struct worker *next;
  18.
  19. } CThread_worker;
  20.
  21.
 


相关文档:

linux 调试动态库

我最近的工作是在linux环境下测试一个.so的动态库,我暂时命名为libdawn.so,是同事实现的,我需要再我的测试程序中加载这个库,并调试该库,我用的编译环境是Eclipse.
1. 在Eclipse->Project->Properities->c/c++ Build->setting->gcc c++ Linker(如果是用gcc c编译的则选gcc c Linker)->Libraries ......

linux gcc 编译时头文件和库文件搜索路径

一、头文件
 
gcc 在编译时寻找所需要的头文件 :
 
※搜寻会从-I开始
 
※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
 
※再找内定目录
/usr/include 
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-l ......

linux内核移植s3c2410,移植正式开始1

在前面的准备工作完成之后,先实验一下,谈不上真正的移植 ,因为代码都没有改的。
首先修改顶层的Makefile,修改ARCH,CROSS_COMPLIE变量。
#ARCH        ?= $(SUBARCH)
ARCH        ?= arm
CROSS_COMPILE    ?= arm-linux-
执行make smd ......

关于linux的几个远程控制的软件

putty
putty是个比较简单的linux远程控制工具,免费的,只要下到putty运行就ok啦,输入要访问的服务器的ip ,把访问类型设为ssh,输入登陆帐户、密码就ok啦,一切都是那么的简单。 
secureCRT
这个比较复杂一点,需要注册码的,但还算是比较容易找到的,它的设置也是很傻瓜的那种,跟putty是一样的,把访问的类型设 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号