引文:学而时习之,不亦说乎。总是忙于具体项目,业务功能的实现;关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点放在了多线程和多进程上,跑了一个实例,居然有新的发现:

(1)多个线程顺序创建的顺序=线程执行顺序吗?

(2)多个线程顺序创建,回调函数执行顺序有规律吗?

示例

#include "apue.h"
#include <pthread.h> void *
thr_fn1(void *arg)
{
printf("thread 1 returning\n");
return((void *));
} void *
thr_fn2(void *arg)
{
printf("thread 2 exiting\n");
pthread_exit((void *));
} int
main(void)
{
int err;
pthread_t tid1, tid2;
void *tret; err = pthread_create(&tid1, NULL, thr_fn1, NULL);
if (err != )
err_quit("can't create thread 1: %s\n", strerror(err));
/*sleep(1);*/
err = pthread_create(&tid2, NULL, thr_fn2, NULL);
if (err != )
err_quit("can't create thread 2: %s\n", strerror(err));
err = pthread_join(tid1, &tret);
if (err != )
err_quit("can't join with thread 1: %s\n", strerror(err));
printf("thread 1 exit code %d\n", (int)tret);
err = pthread_join(tid2, &tret);
if (err != )
err_quit("can't join with thread 2: %s\n", strerror(err));
printf("thread 2 exit code %d\n", (int)tret);
exit();
}

输出

thread 2 exiting
thread 1 returning
thread 1 exit code 1
thread 2 exit code 2

讨论

  看到这个顺序是否有点意外,从多线程实现的机制来讲,这个顺序是没问题的,创建的过程不等于执行的过程,各种教科书都会这么告诉我们。可是我想知道的是,创建的顺序是否和执行的顺序有关系呢?还是用数据说话吧,我执行了10次,每次的输出顺序都是如此。这个引起了我的兴趣。线程2为何每次都是优先于线程1执行呢?按照cup顺序工作的原理,线程1应该先得到时间片才对啊,至少线程1和线程2应该具有同等的执行顺序才对。为何每次的结果都是线程2限制性?却是线程1先完成呢?纠结探索中,有条件的园友可以自己测试一下,看看是否有同样的问题呢。

疑问1:同时创建线程是否线程2优先于1呢?-----单台机器实测来看貌似如此。

疑问2:顺序创建时间差增大,执行顺序会如何?我在线程1创建后做了一个sleep(1),结果:

thread 1 returning
thread 1 exit code 1
thread 2 exiting
thread 2 exit code 2

疑问3:顺序创建线程,线程2的执行顺序为何优于线程1?探索中...!求答案!

环境

vmware8.0 + windows xp + REHL6.3

多线程执行顺序诡异现象谈,你不知道的pthread_create的更多相关文章

  1. pthread_create多线程执行顺序诡异现象

    多线程执行顺序诡异现象谈,你不知道的pthread_create 引文:学而时习之,不亦说乎.总是忙于具体项目,业务功能的实现:关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点 ...

  2. Android-Java控制多线程执行顺序

    功能需求: Thread-0线程:打印 1 2 3 4 5 6 Thread-1线程:打印1 1 2 3 4 5 6 先看一个为实现(功能需求的案例) package android.java; // ...

  3. Java控制多线程执行顺序

    package net.jasonjiang.thread; import java.io.IOException; public class ThreadTestNew { public stati ...

  4. 浅谈原子操作、volatile、CPU执行顺序

    浅谈原子操作.volatile.CPU执行顺序 在计算机发展的鸿蒙年代,程序都是顺序执行,编译器也只是简单地翻译指令,随着硬件和软件的飞速增长,原来的工具和硬件渐渐地力不从心,也逐渐涌现出各路大神在原 ...

  5. 浅谈SQL优化入门:1、SQL查询语句的执行顺序

    1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...

  6. 浅谈Java语言中try{}catch{}和finally{}的执行顺序问题

    浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06  PM  13:41:46  1. 不管有没有出现异常,finally块中代码都会执行: 2. 当t ...

  7. Java多线程之控制执行顺序

    概念: 多线程在并发环境中的正常执行顺序是随机无序的,并不能按照期盼的结果输出. 因为启动一个线程时,线程并不会立即执行,而是等待CPU的资源调度,CPU能调度哪个线程,是通过多种复杂的算法计算而来. ...

  8. 浅谈循环中setTimeout执行顺序问题

    浅谈循环中setTimeout执行顺序问题 (下面有见解一二) 期望:开始输出一个0,然后每隔一秒依次输出1,2,3,4. for (var i = 0; i < 5; i++) { setTi ...

  9. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)

    [分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...

随机推荐

  1. Nexcel的行列,和单元格坐标

    book.Sheets[1].UsedRange.Rows.Count 行数从1开始 book.Sheets[1].UsedRange.LastCol 从0开始 book.Sheets[1].Cell ...

  2. C语言define 可以提高程序运行的速度

    define的优缺点 优点 提高了程序的可读性,同时也方便进行修改: 提高程序的运行效率:使用带参的宏定义既可完成函数调用的功能,又能避免函数的出栈与入栈操作,减少系统开销,提高运行效率: 3.宏是由 ...

  3. php 文件上传处理

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS4AAACvCAIAAADMuaTdAAAcaklEQVR4nO2da3Abx33Az3H6JdNx2i

  4. 萤石A1互联网报警盒子破解细节分析

    攻击点分析:  萤石A1互联网报警盒子使用“全无线解决方案”,传感器的报警通过433.92MHz射频信号发送给报警主机,报警主机可以通过Wi-Fi联网,将报警上传萤石云端,云端会将信息推送到手机端的“ ...

  5. C# zedgraph利用另一窗口取得的串口数据绘图

    C# zedgraph利用另一窗口获得的串口数据绘图第一次用zedgraph,非常不熟悉,网上很多内容看的云里雾里... 这个程序主界面接收串口数据,而另外一个窗口进行实时曲线绘图,要怎么样实现for ...

  6. windows form参数传递过程

    三.windows form参数传递过程 在Windows 程序设计中参数的传递,同样也是非常的重要的. 这里主要是通过带有参数的构造函数来实现的, 说明:Form1为主窗体,包含控件:文本框text ...

  7. Python判断变量的数据类型的两种方法

    https://www.cnblogs.com/jessicaxu/p/7727264.html

  8. WebGL编程指南高级技术篇(常见需求的处理)

    一.鼠标控制模型旋转 实质的根据鼠标移动前后的位置比较得出x,y轴的旋转角度: 图中是一个屏幕,有一个模型(恩,他是一个模型),鼠标由P点移动到P1点,我们假定移动单位步长旋转β角度: P(x1,y1 ...

  9. nib must contain exactly one top level object which must be a UICollectionReusableView instance

    多了一个

  10. CentOS LAMP环境 配置详解

    要想在linux上实现网页服务器(www)需要Apache这个服务器软件,不过Apache仅能提供最基本的静态网站数据而已,想要实现动态网站的话,最好还是要PHP与MySQL的支持,所以下面我们将会以 ...