最近优化了一个程序,使其从单线程处理变为多线程处理

线程为常驻线程

简单写了一个例子

编译:gcc testthread.c -otest -lpthread

注意编译的时候一定要加-lpthread

#include

#include

#include

#include

#include //sleep函数需要这个头文件

#define MAX_THREAD_NUM 5//最大线程数 可根据需要增加相关配置

pthread_mutex_t LOCK = PTHREAD_MUTEX_INITIALIZER;//线程间互斥锁

int gv_iCurrectThreadNum = 0;//当前线程数

//gcc testthread.c -otest -lpthread 编译命令,注意一定要加-lpthread

void* thread_function(void *ptr)//ptr是线程启动的时候传的参数

{

pthread_mutex_lock(&LOCK);//加锁

gv_iCurrectThreadNum++;//各线程要修改的公共部分需要加锁

pthread_mutex_unlock(&LOCK);//解锁

//int *iThreadNum = (int*)ptr;这样写也可以

int iThreadNum = *((int*)ptr);//注意传参之前是什么类型,就要转成什么类型的指针

while(true)

{

printf("thread:%d\n", iThreadNum);//正常逻辑处理的地方,这里随便加了打印

sleep(1);

}

pthread_mutex_lock(&LOCK);

gv_iCurrectThreadNum--;

pthread_mutex_unlock(&LOCK);

}

int main()

{

int iTempThreadNum = 0;

int iRet = 0;

pthread_t *pThread;

//申请内存,正常情况是不需要的,但这里我们要创建的常驻线程

pThread = (pthread_t*)malloc(sizeof(pthread_t) * MAX_THREAD_NUM);

for( ; iTempThreadNum < MAX_THREAD_NUM; iTempThreadNum++)

{

//pthread_create第2个参数是线程分离属性的,NULL表示非分享

//最后一个参数是传给线程处理函数的

//不传的时候可以为NULL,也可以传结构体

iRet = pthread_create(&pThread[iTempThreadNum], NULL, &thread_function, (void*)&iTempThreadNum);

sleep(1);

if(iRet != 0)

printf("create thread failed!\n currect thread num is %d\n", gv_iCurrectThreadNum);

}

printf("create thread succeed!\n currect thread num is %d\n", gv_iCurrectThreadNum);

while(true)

{

iTempThreadNum = gv_iCurrectThreadNum;

if(iTempThreadNum < MAX_THREAD_NUM)

printf("\n有线程掉了\n");

if(iTempThreadNum <= 0)//所有线程都掉了

break;

sleep(20);

}

free(pThread);//释放我们自己申请的内存,其实不是很必要,因为进程马上就要结束了,但为了养成良好的习惯,建议malloc和free要成对的写

return 0;

}

linux c thread,Linux C 多线程相关推荐

  1. linux内核 thread,Linux内核线程kernel thread详解

    内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程 ...

  2. Linux下thread编程

    From: http://blog.sina.com.cn/s/blog_602f87700100dqmk.html Linux下thread编程(一) Sam前些天在提供一个库给别的公司时,因为不喜 ...

  3. Linux文件系统:Linux 内核文件描述符表的演变

    我在<Linux 中每个 TCP 连接最少占用多少内存?>一文中绘制了 Linux 内核现在(4.x)使用的文件描述符表(file descriptor table)的数据结构.本篇文章做 ...

  4. 鸟哥linux+韩顺平linux视频教程学习小结

    linux的特点 优点: 1.免费的/开源的系统 2.支持多线程/多用户的系统 3.安全性好 4.对内存和文件管理优越 linux体积最少只需要内存4M,由于小所以可以做嵌入式开发 缺点: 操作相对困 ...

  5. linux俄罗斯方块程序,linux环境下C++实现俄罗斯方块

    本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 本程序的运行环境是linux,用到了多线程.创建了一个用来绘图的线程和一个获取按键的线程.程序中有一些需要改善的地方,比如 ...

  6. linux命令和Linux基本常用的知识详解

    Linux简介与厂商版本 1. Linux简介 Linux可以有狭义和广义两种定义.狭义来说,Linux实际上指Linux kernel (内核).内核负责管理硬件,并为上层应用提供接口.而广义来说, ...

  7. Linux: 举例说明Linux diff 命令

    在比较文件的时候,通常会用基于GUI的软件.很少有人真正会为了这个目的使用命 令行工具.虽然说使用命令行来比较文件/目录并不像一件小事儿那样容易,但是如果你是一个Linux使用者,那么我想你应该知道如 ...

  8. linux服务器知识学习:linux简介与linux的发行版

    Linux 简介: Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一 ...

  9. linux常用命令、linux系统、linux属于什么操作系统、linux系统安装、linux怎么读、linux和windows的区别、linux配置ip地址、linux系统一般用来,在线查询工具

    linux vi编辑器常用命令 linux 查看ip linux find -name 查找文件名 linux shell linux 查看端口占用 linux 删除文件命令 linux cp命令复制 ...

最新文章

  1. 洛谷 P1598 垂直柱状图【字符串+模拟】
  2. [转]带宽计算-大B与小b的区别
  3. python项目中无法import不同文件的代码
  4. Java问题解决:Java compiler level does not match the version of the installed Java project facet....
  5. postman模拟post请求的四种请求体
  6. 永辉发布元宵数据:汤圆销售明显提升,多个民生产品增长超150%
  7. 京东数科公布11.11一小时战报:白条交易额10秒破亿
  8. 【jQuery笔记Part1】01-jQuery简介集成
  9. 不会Netty,你也永远不会熟悉Java
  10. LAMP笔记之Apache篇(2)
  11. PCIe Gen4 Equlization失败掉速到Gen3的问题排查
  12. Excel合并不同工作簿的表到同一个工作簿
  13. OCLint + Infer + Jenkins + SonarQube 搭建iOS代码静态分析系统
  14. js判断手机是否安装了某个APP,如果安装了就打开,没安装就下载
  15. 【巴什博弈 抢夺资源】
  16. 1790D Matryoshkas
  17. 洛谷3238 HNOI2014 道路阻塞 最短路 线段树(无代码)
  18. ubuntu系统安装时 MBR和GPT的区别
  19. 索尼65X91J 评测
  20. 剑侠情缘3多开器 剑网3多开器 剑网三多开器 剑侠情缘三多开器

热门文章

  1. 张飞老师硬件第六部视频整理——电源——开关电源
  2. 高德地图1008INVALID_USER_SCODE错误
  3. BLDC 电机的反电动势电压仿真
  4. GET/POST 和TCP/UDP 区别
  5. 自己动手做聊天机器人 一-涉及知识
  6. 修改nginx web服务器默认目录结构,Nginx更改Web根目录导致403 Forbidden
  7. java中short类型变量
  8. 分布式BASE理论:数据一致性模型!
  9. 正则表达式,各种空字符和空格字符
  10. java条码识别技术_Java 生成、识别条形码