linux下c++ 多线程的应用示例
2016-03-01 11:29
459 查看
·线程创建
函数原型:int pthread_create(pthread_t *restrict
tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);
返回值:若是成功建立线程返回0,否则返回错误的编号。
形式参数:pthread_t *restrict tidp要创建的线程的线程id指针;const pthread_attr_t *restrict attr创建线程时的线程属性;void* (start_rtn)(void)返回值是void类型的指针函数;void *restrict arg start_rtn的形参。
·线程挂起:该函数的作用使得当前线程挂起,等待另一个线程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。
函数原型:int pthread_join( pthread_t thread, void **value_ptr);
参数说明如下:thread等待退出线程的线程号;value_ptr退出线程的返回值。
·线程退出
函数原型:void pthread_exit(void *rval_ptr);
·获取当前线程id
函数原型:pthread_t pthread_self(void);
·互斥锁
创建pthread_mutex_init;销毁pthread_mutex_destroy;加锁pthread_mutex_lock;解锁pthread_mutex_unlock。
·条件锁
创建pthread_cond_init;销毁pthread_cond_destroy;触发pthread_cond_signal;广播pthread_cond_broadcast
S;等待pthread_cond_wait。
·正确处理Linux平台下的线程结束问题
在Linux平台下,当处理线程结束时需要注意的一个问题就是如何让一个线程善始善终,让其所占资源得到正确释放。在Linux平台默认情况下,虽然各个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是已经终止的线程的资源并不会随着线程的终止而得到释放,我们需要调用pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。
/test1.cpp/ 无参多线程,主线程等待其他线程完成后运行
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
//int flag
void *thread(void *ptr)
{
int i;
for(i=0;i<3;i++)
{
sleep(1);
printf("this is a pthread.\n");
}
//flag =1;
}
int main(void)
{
pthread_t id;
int ret;
ret=pthread_create(&id,NULL,thread,NULL);
if(ret!=0)
{
printf("Create pthread error!\n");
exit(1);
}
//while(flag!=1) {}
/*
for(i=0;i<3;i++)
{
printf("this is the main process.\n");
sleep(1);
}*/
pthread_join(id,NULL);
printf("this is the main process.\n");
//flag=0;
return(0);
}
/test2.cpp/ 含一参多线程,主线程等待其他线程完成后运行
#include <stdio.h>
#include<stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <math.h>
void* thread(void *arg)
{
int count=*(int *)arg;
for(int i=0;i<count;i++)
{
sleep(1);
printf("this is a pthread.\n");
}
}
int main(void)
{
pthread_t id;
int ret;
srand(int(time(0)));
int count=rand()%10;
ret=pthread_create(&id,NULL,thread,&count);
if(ret!=0)
{
printf("Create pthread error!\n");
exit(1);
}
//while(flag!=1) {}
/*
for(i=0;i<3;i++)
{
printf("this is the main process.\n");
sleep(1);
}*/
pthread_join(id,NULL);
printf("this is the main process.\n");
//flag=0;
return(0);
}
含多参多线程,将多参封装到结构体,传递进来
函数原型:int pthread_create(pthread_t *restrict
tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);
返回值:若是成功建立线程返回0,否则返回错误的编号。
形式参数:pthread_t *restrict tidp要创建的线程的线程id指针;const pthread_attr_t *restrict attr创建线程时的线程属性;void* (start_rtn)(void)返回值是void类型的指针函数;void *restrict arg start_rtn的形参。
·线程挂起:该函数的作用使得当前线程挂起,等待另一个线程返回才继续执行。也就是说当程序运行到这个地方时,程序会先停止,然后等线程id为thread的这个线程返回,然后程序才会断续执行。
函数原型:int pthread_join( pthread_t thread, void **value_ptr);
参数说明如下:thread等待退出线程的线程号;value_ptr退出线程的返回值。
·线程退出
函数原型:void pthread_exit(void *rval_ptr);
·获取当前线程id
函数原型:pthread_t pthread_self(void);
·互斥锁
创建pthread_mutex_init;销毁pthread_mutex_destroy;加锁pthread_mutex_lock;解锁pthread_mutex_unlock。
·条件锁
创建pthread_cond_init;销毁pthread_cond_destroy;触发pthread_cond_signal;广播pthread_cond_broadcast
S;等待pthread_cond_wait。
·正确处理Linux平台下的线程结束问题
在Linux平台下,当处理线程结束时需要注意的一个问题就是如何让一个线程善始善终,让其所占资源得到正确释放。在Linux平台默认情况下,虽然各个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是已经终止的线程的资源并不会随着线程的终止而得到释放,我们需要调用pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源。
/test1.cpp/ 无参多线程,主线程等待其他线程完成后运行
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
//int flag
void *thread(void *ptr)
{
int i;
for(i=0;i<3;i++)
{
sleep(1);
printf("this is a pthread.\n");
}
//flag =1;
}
int main(void)
{
pthread_t id;
int ret;
ret=pthread_create(&id,NULL,thread,NULL);
if(ret!=0)
{
printf("Create pthread error!\n");
exit(1);
}
//while(flag!=1) {}
/*
for(i=0;i<3;i++)
{
printf("this is the main process.\n");
sleep(1);
}*/
pthread_join(id,NULL);
printf("this is the main process.\n");
//flag=0;
return(0);
}
/test2.cpp/ 含一参多线程,主线程等待其他线程完成后运行
#include <stdio.h>
#include<stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <math.h>
void* thread(void *arg)
{
int count=*(int *)arg;
for(int i=0;i<count;i++)
{
sleep(1);
printf("this is a pthread.\n");
}
}
int main(void)
{
pthread_t id;
int ret;
srand(int(time(0)));
int count=rand()%10;
ret=pthread_create(&id,NULL,thread,&count);
if(ret!=0)
{
printf("Create pthread error!\n");
exit(1);
}
//while(flag!=1) {}
/*
for(i=0;i<3;i++)
{
printf("this is the main process.\n");
sleep(1);
}*/
pthread_join(id,NULL);
printf("this is the main process.\n");
//flag=0;
return(0);
}
含多参多线程,将多参封装到结构体,传递进来
相关文章推荐
- 阿里云linux服务器分区,格式化,挂载
- Linux find 用法示例
- Linux下TFTP服务的安装、配置和操作
- linux svn安装和配置
- 【Linux C中文函数手册】 字符串转换函数
- unzip several files together
- 在linux上安装pear
- Linux IO实时监控iostat命令详解
- 20条Linux命令面试问答
- 【转】linux(Ubuntu)配置svn仓库,搭建svn服务器
- 【转】Linux下svn的常用工作流程
- linux下删除乱码文件名的方法
- centos6.5制作本地yum源
- linux中的nm命令简介
- sqlite数据库读写在linux下的权限问题
- Linux(centos)的常用基本命令
- PXE批量部署linux操作系统--马哥
- PXE实现批量部署linux系统
- Linux 平台下 YUM 源配置 手册
- Linux之使用内核模块增加一个系统调用