1. //线程间的通信
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <unistd.h>
  7. #include <pthread.h>
  8.  
  9. /*线程1与控制线程通信方法1--全局变量*/
  10. int g_num=;
  11.  
  12. void *thread_run(void *arg)
  13. {
  14. //线程1被分离了,但最好不要使用pthread_join()函数接受,多线程下报错内存溢出
  15. pthread_detach(pthread_self());
  16. int *p=(int *)arg;
  17. (*p)++;
  18. g_num=;
  19. /*线程1与控制线程通信方法2--pthread_exit()函数的参数*/
  20. //pthread_exit(p);
  21. //执行pthread_exit()函数后,线程会直接退出
  22. printf("线程1退出了!\n");\
  23. /*线程1与控制线程通信方法3--线程中return*/
  24. return p;
  25. }
  26.  
  27. int main(int arg,char *args[])
  28. {
  29. /*
  30. * 每个线程都拥有各自的栈内存,但是彼此之间的栈内存是可以互相访问,
  31. * 比如在控制线程定义的变量,可以在线程1中访问
  32. * 线程1中定义变量可能无法在控制线程访问,因为无法确定变量是否因为线程执行完毕被释放了
  33. * */
  34. int index=;
  35. pthread_t thr1;
  36. if(pthread_create(&thr1,NULL,thread_run,&index)!=)
  37. {
  38. printf("pthread_create() failed !\n");
  39. return -;
  40. }
  41. //等待线程1
  42. int *p=NULL;
  43. pthread_join(thr1,(void **)&p);
  44. printf("线程1的返回值%d\n",*p);
  45. printf("控制线程的index=%d\n",index);
  46. printf("g_num=%d\n",g_num);
  47. return ;
  48. }
  1. //线程的并行执行
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <unistd.h>
  7. #include <pthread.h>
  8.  
  9. void *thread_run(void *arg)
  10. {
  11. //pthread_detach(pthread_self());
  12. if (arg != NULL)
  13. {
  14. int *p = (int *) arg;
  15. int i = ;
  16. for (i = ; i < *p; i++)
  17. {
  18. printf("这是线程%d的第%d圈!\n", (int) pthread_self(), i);
  19. sleep();
  20. }
  21. }
  22. return NULL;
  23. }
  24.  
  25. int main(int arg, char *args[])
  26. {
  27. int i = ;
  28. int num1 = ;
  29. int num2 = ;
  30. printf("请输入创建线程的个数:\n");
  31. scanf("%d", &num1);
  32. printf("请输入每个线程的圈数:\n");
  33. scanf("%d", &num2);
  34. pthread_t thrs[];
  35. /*
  36. * 多线程是并行运行的
  37. * */
  38. for (i = ; i < num1; i++)
  39. {
  40. if (pthread_create(&thrs[i], NULL, thread_run, &num2) != )
  41. {
  42. printf("pthread_create() failed !\n");
  43. return -;
  44. }
  45. }
  46. for (i = ; i < num1; i++)
  47. {
  48. /*如果没有pthread_join(),那么控制线程不会等待子线程,会直接退出*/
  49. pthread_join(thrs[i],NULL);
  50. }
  51. return ;
  52. }

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. 搭建了个人的github.io博客

    地址:http://www.shutu.tech 说明: 基于github + hexo简易搭建的个人博客,用于收藏经典博文及技术文章,也会用于个人的技术成长记录.我是看到这篇文章搭建的:http:/ ...

  2. JavaScript : 浅讲ajax

    1.ajax入门案例 1.1 搭建Web环境 ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新.通过在后台与服务器 ...

  3. 给jquery-validation插件添加控件的验证回调方法

    jquery-validation.js在前端验证中使用起来非常方便,提供的功能基本上能满足大部分验证需求,例如:1.内置了很多常用的验证方法:2.可以自定义错误显示信息:3.可以自定义错误显示位置: ...

  4. Debug Databinding Issues in WPF

    DataBinding is one of the most powerful features in WPF. But because it resolves the bindings at run ...

  5. C# http

    minihttpd minihttpd:HTTPWeb服务器库 https://www.codeproject.com/articles/11342/minihttpd-an-http-web-ser ...

  6. 浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。

    本文版权桂博客园和作者吴双共同所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/6016055.html 写在前面 大家好我是博客园的蜗牛,博客园的蜗牛就是我 ...

  7. DataTable的orderby有关问题

    在网上找了一个在后台重新对DataTable排序的方法(之所以不在数据库是因为我生成的是报表,写了存储过程用的表变量,order by也要用变量,死活拼不起来,sql能力没过关,动态sql也试了) s ...

  8. java代码解压zip文件

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...

  9. python爬虫成长之路(一):抓取证券之星的股票数据

    获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...

  10. 今天思考一个问题,PHP const和static的区别

    static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...