Linux 进程与线程六
//线程间的通信
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.h> /*线程1与控制线程通信方法1--全局变量*/
int g_num=; void *thread_run(void *arg)
{
//线程1被分离了,但最好不要使用pthread_join()函数接受,多线程下报错内存溢出
pthread_detach(pthread_self());
int *p=(int *)arg;
(*p)++;
g_num=;
/*线程1与控制线程通信方法2--pthread_exit()函数的参数*/
//pthread_exit(p);
//执行pthread_exit()函数后,线程会直接退出
printf("线程1退出了!\n");\
/*线程1与控制线程通信方法3--线程中return*/
return p;
} int main(int arg,char *args[])
{
/*
* 每个线程都拥有各自的栈内存,但是彼此之间的栈内存是可以互相访问,
* 比如在控制线程定义的变量,可以在线程1中访问
* 线程1中定义变量可能无法在控制线程访问,因为无法确定变量是否因为线程执行完毕被释放了
* */
int index=;
pthread_t thr1;
if(pthread_create(&thr1,NULL,thread_run,&index)!=)
{
printf("pthread_create() failed !\n");
return -;
}
//等待线程1
int *p=NULL;
pthread_join(thr1,(void **)&p);
printf("线程1的返回值%d\n",*p);
printf("控制线程的index=%d\n",index);
printf("g_num=%d\n",g_num);
return ;
}
//线程的并行执行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.h> void *thread_run(void *arg)
{
//pthread_detach(pthread_self());
if (arg != NULL)
{
int *p = (int *) arg;
int i = ;
for (i = ; i < *p; i++)
{
printf("这是线程%d的第%d圈!\n", (int) pthread_self(), i);
sleep();
}
}
return NULL;
} int main(int arg, char *args[])
{
int i = ;
int num1 = ;
int num2 = ;
printf("请输入创建线程的个数:\n");
scanf("%d", &num1);
printf("请输入每个线程的圈数:\n");
scanf("%d", &num2);
pthread_t thrs[];
/*
* 多线程是并行运行的
* */
for (i = ; i < num1; i++)
{
if (pthread_create(&thrs[i], NULL, thread_run, &num2) != )
{
printf("pthread_create() failed !\n");
return -;
}
}
for (i = ; i < num1; i++)
{
/*如果没有pthread_join(),那么控制线程不会等待子线程,会直接退出*/
pthread_join(thrs[i],NULL);
}
return ;
}
Linux 进程与线程六的更多相关文章
- Linux进程或线程绑定到CPU
Linux进程或线程绑定到CPU 为了让程序拥有更好的性能,有时候需要将进程或线程绑定到特定的CPU,这样可以减少调度的开销和保护关键进程或线程. 进程绑定到CPU Linux提供一个接口,可以将进程 ...
- Linux进程和线程的比較
进程与线程 參考:http://www.cnblogs.com/blueclue/archive/2010/07/16/1778855.html 首先比較Linux进程和线程的创建的差别,以此展开: ...
- Linux 进程、线程运行在指定CPU核上
/******************************************************************************** * Linux 进程.线程运行在指定 ...
- linux进程、线程与cpu的亲和性(affinity)
参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...
- Linux进程与线程的区别
进程与线程的区别,早已经成为了经典问题.自线程概念诞生起,关于这个问题的讨论就没有停止过.无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.一般程序员而言,搞清楚二者的概念, ...
- linux进程与线程的区别【转】
知乎上总结: "linux使用的1:1的线程模型,在内核中是不区分线程和进程的,都是可运行的任务而已.fork调用clone(最少的共享),pthread_create也是调用clone(最 ...
- Linux进程和线程
一.进程产生的方式 1.描述进程的ID号通常叫做PID,即进程ID,PID的变量类型为pid_t. 2.getpid(void)返回当前进程的ID号,getppid(void)返回当前进程的父进程的I ...
- Linux -- 进程或线程独占CPU
如果想让特定进程或线程独占某一或某些CPU,我们需要做三件事. 一,隔离CPU,避免其它线程run在被隔离的CPU上. 二,绑定所有的interrupts到非隔离的CPU上,避免被隔离的CPU收到in ...
- 操作系统:Linux进程与线程
这里是一部分内容,还会做修改. 一:目的及内容 学习fork(),exec,pthread库函数的使用,阅读源码,分析fork,exec,pthread_create函数的机理 代码实现: 进程A创建 ...
随机推荐
- Oracle 11.2.0.4 DataGuard 环境打PSU,OJVM PSU补丁快速参考
环境:RHEL6.5 + Oracle 11.2.0.4 DataGuard physical standby 主库和备库都是单节点. 需求:主备库同时应用160719的PSU和OJVM PSU补丁. ...
- Rafy 框架 - 大批量导入实体
某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中.虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多时,效率就会很低.所以 Rafy 设计了 ...
- window下使用Redis Cluster部署Redis集群
日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...
- Android 的进程和线程
进程和线程 如果某个应用程序组件是第一次被启动,且这时应用程序也没有其他组件在运行,则android系统会为应用程序创建一个包含单个线程的linux进程.默认情况下,同一个应用程序的所有组件都运行在同 ...
- Lind.DDD.SSO单点登陆组件的使用(原创)
回到目录 一般sso的说明 在Lind.DDD框架里,有对单点登陆的集成,原理就是各个网站去sso网站统一登陆授权,之后在sso网站将登陆的token进行存储,存储方式随你(cache,redis,m ...
- jQuery实现DOM加载方法源码分析
传统的判断dom加载的方法 使用 dom0级 onload事件来进行触发所有浏览器都支持在最初是很流行的写法 我们都熟悉这种写法: window.onload=function(){ ... } 但 ...
- BPM实例分享——金额规则大写
金额规则大写 在涉及金额的流程中经常会遇到需要大写金额数据与小写金额匹配,如何实现输入数字后自动转换呢? 初级用法: 1.在默认表单基本属性javascript 中增加如下金额转换方法 /** 数字金 ...
- jTemplates部分语法介绍
1.{#if} {#if |COND|}..{#elseif |COND|}..{#else}..{#/if} Examples: {#if 2*8==16} good {#else} fail {# ...
- nfs挂载配置
nfs挂载步骤 服务器端 1.安装nfs-utils rpcbind $sudo yum –y install nfs-utils rpcbind 2.文件开放出去配置/etc/exports 例子: ...
- 实现从Oracle增量同步数据到GreenPlum
简介: GreenPlum是一个基于PostgreSQL数据库开发的MPP架构的数据库仓库,适用于OLAP系统,支持50PB(1PB=1000TB)级海量数据的存储和处理. 背景: 目前有一个业务是需 ...