//线程间的通信
#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 进程与线程六的更多相关文章

  1. Linux进程或线程绑定到CPU

    Linux进程或线程绑定到CPU 为了让程序拥有更好的性能,有时候需要将进程或线程绑定到特定的CPU,这样可以减少调度的开销和保护关键进程或线程. 进程绑定到CPU Linux提供一个接口,可以将进程 ...

  2. Linux进程和线程的比較

    进程与线程 參考:http://www.cnblogs.com/blueclue/archive/2010/07/16/1778855.html 首先比較Linux进程和线程的创建的差别,以此展开: ...

  3. Linux 进程、线程运行在指定CPU核上

    /******************************************************************************** * Linux 进程.线程运行在指定 ...

  4. linux进程、线程与cpu的亲和性(affinity)

    参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...

  5. Linux进程与线程的区别

    进程与线程的区别,早已经成为了经典问题.自线程概念诞生起,关于这个问题的讨论就没有停止过.无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.一般程序员而言,搞清楚二者的概念, ...

  6. linux进程与线程的区别【转】

    知乎上总结: "linux使用的1:1的线程模型,在内核中是不区分线程和进程的,都是可运行的任务而已.fork调用clone(最少的共享),pthread_create也是调用clone(最 ...

  7. Linux进程和线程

    一.进程产生的方式 1.描述进程的ID号通常叫做PID,即进程ID,PID的变量类型为pid_t. 2.getpid(void)返回当前进程的ID号,getppid(void)返回当前进程的父进程的I ...

  8. Linux -- 进程或线程独占CPU

    如果想让特定进程或线程独占某一或某些CPU,我们需要做三件事. 一,隔离CPU,避免其它线程run在被隔离的CPU上. 二,绑定所有的interrupts到非隔离的CPU上,避免被隔离的CPU收到in ...

  9. 操作系统:Linux进程与线程

    这里是一部分内容,还会做修改. 一:目的及内容 学习fork(),exec,pthread库函数的使用,阅读源码,分析fork,exec,pthread_create函数的机理 代码实现: 进程A创建 ...

随机推荐

  1. spring boot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  2. sql 分组取最新的数据sqlserver巧用row_number和partition by分组取top数据

    SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...

  3. ionic2+angular2中踩的那些坑

    好久没写什么东西了,最近在做一个ionic2的小东西,遇到了不少问题,也记录一下,避免后来的同学走弯路. 之前写过一篇使用VS2015开发ionic1的文章,但自己还没摸清门道,本来也是感兴趣就学习了 ...

  4. sqlserver 乐观并发模式

    一开始不怎么理解乐观并发模式是什么. 这种模式可以在死锁问题上使用. 在sql中 这样就是乐观并发模式. SqlServer默认开启的是悲观并发模式 例如:

  5. Entity Framework 教程——模型浏览器

    模型浏览器: 在之前的章节中,我们创建了第一个关于学校的实体数据模型.但是EDM设计器并没有将他所创建的所有对象完全显示出来.它只将数据库中的被选择的表与视图显示出来了. 模型浏览器可以将EDM所创建 ...

  6. asp.net MVC4——省市三级联动

    controller: public ActionResult GetCity(string id) { AreaService _areaSvc = new AreaService(); List& ...

  7. BZOJ3095 : 二元组

    \[\begin{eqnarray*}&&\sum_{i=0}^{n-1}\left(ki+b-a_i\right)^2\\&=&\sum_{i=0}^{n-1}\le ...

  8. Java集合-Python数据结构比较

    Java list与Python list相比较 Java List:有序的,可重复的.(有序指的是集合中对象的顺序与添加顺序相同) Python list(列表)是有序的,可变的. Java Lis ...

  9. JavaScript 9种类型

    Undefined . Null . Boolean . String . Number . Object . Reference .List .Completion

  10. 5.2 Array类型介绍

    Array类型是数组类型,Array(数组)类型也是引用类型中的一种. js 数组中的每一项可以保存任何类型的数据. js数组的大小/长度是可以动态调整的.如果你往数组中添加数据,数组长度会自动增加. ...