继续接着上次的posix线程来学习:

回顾一下创建线程的函数:

pthread_att_t属性变量是需要进行初始化才能够用的,一定初始化了属性变量,它就包含了线程的多种属性的值,那到底有哪些属性了,下面一一来介绍:

其中第二个参数的指定值可以通过man帮助来了解到:

下面用程序来实验一下:

编译运行:

【注意】:在设置栈大小时,一般第二个参数设置为0表示用系统定义的栈的大小,如果指定我们自己设定的栈的大小可能会导致一些移植性的问题,所以一般情况下栈的大小不会去设置。

首先需要了解线程调度竞争范围:

那默认线程是什么竞争范围呢?用程序来查看:

这意味着新创建的线程跟调者用线程是否是一样的调度策略,如果设置成继承的则拥有一样的调度策略:

其中调到了线程模型,这里介绍一下,其实线程模型有三种:

其中需要说明一下,int pthread_setconcurrency(int new_level)设置并发级别,并不意味着线程的并发数是new_level,仅仅只是设置了一个并发级别,并且只是给内核一个提示而已,并非真正的提供new_level个核心线程来映射用户线程:

上面的这些概念还是有些生涩,下面来用一个实例程序来进一步理解,在写程序之前,需要用到特定数据的一些函数:

找一个空位来创建特定数据:

删除特定数据:

给特定数据设定值及获取特定数据里面的值:

下面来看程序:

然后再创建两个线程出来,来使用特定数据:

接下来编写线程处理函数:

下面编译运行:

从结果来看:

下面再来介绍一对函数,如下:

它代表init_routine函数只在第一个线程进入的时候被执行一次,下面来修改一下程序:

那如果希望只有第一个线程进来时创建,而其它线程进来不再创建,那这个函数就派上用场了,修改程序如下:

好了,这次先学到这,下节继续~~

最新文章

  1. 转载----How fast is Redis?
  2. CSS3——让最后一行显示省略号
  3. Python Twisted介绍
  4. MATLAB 通过二进制读写文件
  5. 1.单一职责原则(Single Responsibility Principle)
  6. BZOJ 1050
  7. ORACLE触发器的管理与实际应用【weber出品】
  8. 面试题之——将文件夹下java文件写入到新的文件夹,并修改扩展名
  9. 当Erlang遇到Solr
  10. CSS3 制作网格动画效果
  11. IDEA、Matlab 注释
  12. 微服务与Spring Cloud资料
  13. 使用HttpClient发送Get/Post请求 你get了吗?
  14. 了解 IP 地址,默认网关,子网掩码,DNS 的概念和作用。
  15. JAVA性能优化:35个小细节让你提升java代码的运行效率
  16. 在Python中调用C++模块
  17. 為什麼gnome-terminal中不能使用ctrl_shift_f來進行查找? 是因為 跟输入法的全局设置衝突了!
  18. python的内置模块random随机模块方法详解以及使用案例(五位数随机验证码的实现)
  19. bat判断进程是否存在
  20. [转]MVC Html.AntiForgeryToken() 防止CSRF攻击

热门文章

  1. Xray写POC插件
  2. python:如何传递一个列表参数
  3. 爬虫存储介质之MongoDB存储
  4. 转录组组装软件stringtie
  5. LeetCode 53. 最大子序和(Maximum Subarray)
  6. ElasticSearch RestHighLevelClient 通用操作
  7. nmap使用帮助翻译
  8. 17. Scala泛型、上下界、视图界定、上下文界定
  9. 2019牛客多校九 I. KM and M (类欧几里得)
  10. Redis 如何与数据库事务保持一致