C语言编程(多线程)
C语言中多线程编程包括的文件:#include<pthread.h>(linux环境下)
pthread_t //线程函数返回类型
pthread_mutrex_t //互斥锁类型
int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*func),void *arg);
参数说明
thread :指向thread_t类型变量的指针,用于保存线程的ID
typedef unsigned long int thread_t;
attr :指向pthread_attr_t类型变量的指针,或者为NULL
func:指向新线程所运行函数的指针
arg: 传递给func的参数
成功创建线程则返回0,否则返回非零
这个参数为线程属性,pthread_attr_t主要包括:scope属性,detach属性,堆栈地址,堆栈大小,优先级。参数设置为NULL则将采用默认的属性配置。
http://blog.csdn.net/hudashi/article/details/7709413
http://hi.baidu.com/7828058/blog/item/256e16decd1a385e94ee3784.html
当线程的属性没有设置为PTHREAD_CREATE_DETACH时候,我们可以使用pthread_join等待进程结束,来释放资源。
函数原型
int pthread_join(pthread_t thread,void** retval)
参数说明:
thread:所等待的进程
retval:z指向某存储线程返回值的变量
返回值:0 成功返回
errorcode 错误
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <windows.h> int piao = ; pthread_mutex_t mut; void* tprocess1(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口1----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
} void* tprocess2(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口2----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
}
void* tprocess3(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口3----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
}
void* tprocess4(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口4----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
} int main() {
pthread_mutex_init(&mut, NULL);
pthread_t t1;
pthread_t t2;
pthread_t t3;
pthread_t t4;
pthread_create(&t4, NULL, tprocess4, NULL);
pthread_create(&t1, NULL, tprocess1, NULL);
pthread_create(&t2, NULL, tprocess2, NULL);
pthread_create(&t3, NULL, tprocess3, NULL);
Sleep();
return ;
}
//线程一的线程函数一结束就自动释放资源,线程二就得等到pthread_join来释放系统资源。 #include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h> static void pthread_func_1 (void);
static void pthread_func_2 (void); int main (int argc, char** argv)
{
pthread_t pt_1 = ;
pthread_t pt_2 = ;
pthread_attr_t atrr = {};
int ret = ; /*初始化属性线程属性*/
pthread_attr_init (&attr);
pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); ret = pthread_create (&pt_1, &attr, pthread_func_1, NULL);
if (ret != )
{
perror ("pthread_1_create");
} ret = pthread_create (&pt_2, NULL, pthread_func_2, NULL);
if (ret != )
{
perror ("pthread_2_create");
} pthread_join (pt_2, NULL); return ;
} static void pthread_func_1 (void)
{
int i = ; for (; i < ; i++)
{
printf ("This is pthread_1.\n"); if (i == )
{
pthread_exit ();
}
} return;
} static void pthread_func_2 (void)
{
int i = ; for (; i < ; i ++)
{
printf ("This is pthread_2.\n");
} return;
}
C语言编程(多线程)的更多相关文章
- c语言下多线程
原文:c语言下多线程 [问题]创建了10个线程,10个线程公用一个线程体,创建如下: int t1=0,t2=1,t3=2,t4=3,t5=4,t6=5,t7=6,t8=7,t9=8,t10=9; i ...
- python并发编程&多线程(一)
本篇理论居多,实际操作见: python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一 ...
- C++语言编程规范
前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...
- 第十章:Python高级编程-多线程、多进程和线程池编程
第十章:Python高级编程-多线程.多进程和线程池编程 Python3高级核心技术97讲 笔记 目录 第十章:Python高级编程-多线程.多进程和线程池编程 10.1 Python中的GIL 10 ...
- [并发编程 - 多线程:信号量、死锁与递归锁、时间Event、定时器Timer、线程队列、GIL锁]
[并发编程 - 多线程:信号量.死锁与递归锁.时间Event.定时器Timer.线程队列.GIL锁] 信号量 信号量Semaphore:管理一个内置的计数器 每当调用acquire()时内置计数器-1 ...
- C语言编程实现Linux命令——who
C语言编程实现Linux命令--who 实践分析过程 who命令是查询当前登录的每个用户,它的输出包括用户名.终端类型.登录日期及远程主机,在Linux系统中输入who命令输出如下: 我们先man一下 ...
- [R语言]R语言使用多线程对数据库进行大批量访问时出现无法连接问题
问题描述: 在R中使用多线程对数据库进行写入,在服务器端运行脚本(linux环境),总是在第6-7万个任务线程时,出现无法连接到数据库的问题.任务中断,错误信息为task 6xxxx failed,C ...
- 个人c语言编程风格总结
总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的.首先声明,我下面提到的编程规范,是自己给自己定的,不是c语言里面规定的. 一件事情,做成和做好中间可能隔了 ...
- Linux下C语言编程实现spwd函数
Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...
随机推荐
- Cocoapods pod update执行失败报错CocoaPods was not able to update the `master` repo.2019的解决
很久没动pod,最近更新发现: CocoaPods报CocoaPods was not able to update the `master` repo. If this is an unexpect ...
- Netty学习(八)-Netty的心跳机制
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a953713428/article/details/69378412我们知道在TCP长连接或者Web ...
- Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 讯飞科大 语音云.docx \Atitit 代码托管与虚拟主机.docx \Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx \Atitit 几大研发体系对比 Stage-Gat
Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 ...
- MySQL安装、配置、测试
MySQL安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.MySQL安装配置 4.Java访问MySQL测试 5.注事事项 6.相关博文 >>看不清的图片 ...
- 【原创 Hadoop&Spark 动手实践 8】Spark 应用经验、调优与动手实践
[原创 Hadoop&Spark 动手实践 7]Spark 应用经验.调优与动手实践 目标: 1. 了解Spark 应用经验与调优的理论与方法,如果遇到Spark调优的事情,有理论思考框架. ...
- JS 日期补0
js日期需要yyyy-mm-dd的时候只显示yyyy-m-d,需要前面补充0,之前都是用的判断,感觉非常low.刚刚看到一个方法padStart用了用还不错,padStart是为数值补全指定位数,对应 ...
- CAS单点登陆,URL多出个参数jsessionid导致登陆失败问题
目录: 1.定位问题 2.问题产生的原因 3.解决问题 一 定位问题 首先,如下图所示:输入到地址栏的地址被302重定向到单点登录地址,地址由Response Headers中的参数Location所 ...
- ng-repeat 的重复问题
如果ng-repeat绑定的数组中元素有重复, 如 $scope.data = [1,2,2] ng-repeat="value in data" //这种写法就会报错,ngRe ...
- 刷机补丁包updater-script脚本
1.单刷补丁包 新建META-INF文件夹,新建txt文件命名为:updater-script新建system文件夹,在里面新建app文件夹,把你要单刷的apk放进app文件夹在updater-scr ...
- win10 Faster-RCNN训练自己数据集遇到的问题集锦 (转)
题注: 在win10下训练实在是有太多坑了,在此感谢网上的前辈和大神,虽然有的还会把你引向另一个坑~~. 最近,用faster rcnn跑一些自己的数据,数据集为某遥感图像数据集——RSOD,标注格式 ...