linux c thread,Linux C 多线程
最近优化了一个程序,使其从单线程处理变为多线程处理
线程为常驻线程
简单写了一个例子
编译: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 多线程相关推荐
- linux内核 thread,Linux内核线程kernel thread详解
内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程 ...
- Linux下thread编程
From: http://blog.sina.com.cn/s/blog_602f87700100dqmk.html Linux下thread编程(一) Sam前些天在提供一个库给别的公司时,因为不喜 ...
- Linux文件系统:Linux 内核文件描述符表的演变
我在<Linux 中每个 TCP 连接最少占用多少内存?>一文中绘制了 Linux 内核现在(4.x)使用的文件描述符表(file descriptor table)的数据结构.本篇文章做 ...
- 鸟哥linux+韩顺平linux视频教程学习小结
linux的特点 优点: 1.免费的/开源的系统 2.支持多线程/多用户的系统 3.安全性好 4.对内存和文件管理优越 linux体积最少只需要内存4M,由于小所以可以做嵌入式开发 缺点: 操作相对困 ...
- linux俄罗斯方块程序,linux环境下C++实现俄罗斯方块
本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 本程序的运行环境是linux,用到了多线程.创建了一个用来绘图的线程和一个获取按键的线程.程序中有一些需要改善的地方,比如 ...
- linux命令和Linux基本常用的知识详解
Linux简介与厂商版本 1. Linux简介 Linux可以有狭义和广义两种定义.狭义来说,Linux实际上指Linux kernel (内核).内核负责管理硬件,并为上层应用提供接口.而广义来说, ...
- Linux: 举例说明Linux diff 命令
在比较文件的时候,通常会用基于GUI的软件.很少有人真正会为了这个目的使用命 令行工具.虽然说使用命令行来比较文件/目录并不像一件小事儿那样容易,但是如果你是一个Linux使用者,那么我想你应该知道如 ...
- linux服务器知识学习:linux简介与linux的发行版
Linux 简介: Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一 ...
- linux常用命令、linux系统、linux属于什么操作系统、linux系统安装、linux怎么读、linux和windows的区别、linux配置ip地址、linux系统一般用来,在线查询工具
linux vi编辑器常用命令 linux 查看ip linux find -name 查找文件名 linux shell linux 查看端口占用 linux 删除文件命令 linux cp命令复制 ...
最新文章
- 洛谷 P1598 垂直柱状图【字符串+模拟】
- [转]带宽计算-大B与小b的区别
- python项目中无法import不同文件的代码
- Java问题解决:Java compiler level does not match the version of the installed Java project facet....
- postman模拟post请求的四种请求体
- 永辉发布元宵数据:汤圆销售明显提升,多个民生产品增长超150%
- 京东数科公布11.11一小时战报:白条交易额10秒破亿
- 【jQuery笔记Part1】01-jQuery简介集成
- 不会Netty,你也永远不会熟悉Java
- LAMP笔记之Apache篇(2)
- PCIe Gen4 Equlization失败掉速到Gen3的问题排查
- Excel合并不同工作簿的表到同一个工作簿
- OCLint + Infer + Jenkins + SonarQube 搭建iOS代码静态分析系统
- js判断手机是否安装了某个APP,如果安装了就打开,没安装就下载
- 【巴什博弈 抢夺资源】
- 1790D Matryoshkas
- 洛谷3238 HNOI2014 道路阻塞 最短路 线段树(无代码)
- ubuntu系统安装时 MBR和GPT的区别
- 索尼65X91J 评测
- 剑侠情缘3多开器 剑网3多开器 剑网三多开器 剑侠情缘三多开器