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创建 ...
随机推荐
- Federated Identity Pattern 联合身份模式
Delegate authentication to an external identity provider. This pattern can simplify development, min ...
- Spark 入门
Spark 入门 目录 一. 1. 2. 3. 二. 三. 1. 2. 3. (1) (2) (3) 4. 5. 四. 1. 2. 3. 4. 5. 五. Spark Shell使用 ...
- Lua 安全调用 metatable 的简单应用
事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...
- Android开机动画
Android系统的开机动画可分为三个部分,kernel启动,init进程启动,android系统服务启动.这三个开机动画都是在一个叫做 帧缓冲区(frame buffer)的硬件设备上进行渲染绘制的 ...
- Memcached初识
高性能分布式内存对象缓存系统. 参考: Memcached官网: Memcached简介-1:Memcached简介-2: Memcached 教程 | 菜鸟教程:
- 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署
少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...
- Web测试介绍2一 安全测试
安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程. 主要安全需求包括: (i) 认证 Authent ...
- VMware安装CentOS时,无法以图形界面安装解决办法
有的同学问: 用虚拟机软件(vmware.VirtualBox)安装CentOS系统时, 安装过程中没有中文,也没有出现图形界面,都是以命令行方式去安装, 有时候又会出现图形界面,不知道哪里配置的问题 ...
- linux(十一)__Apache服务器
查询是否安装了apache rpm -qa |grep httpd yum install httpd 安装 service httpd start 启动 测试Apache服务器 注意:防火墙 ...
- 窗体作为控件嵌入panel
EyeView frm = new EyeView(); frm.TopLevel = false; frm.Parent = this.panel1; frm.FormBorderStyle = F ...