linux多进程优先级,Linux多线程之优先级

本人转载的 Linux多线程编程(一)和 linux多线程编程(五)解决我的 如下问题:

1、多线程的作用: 即什么情况考虑使用多线程?

2、多线程的创建: 默认参数创建即可!pthread_create(&tid,NULL,(void *)thread_func,NULL);

3、多线程的同步: 掌握互斥,条件  两种同步方式即可!

下表来自于:http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/index.html

表 1. 线程函数列表

对象

操作

Linux Pthread API

Windows SDK 库对应 API

线程

创建

pthread_create

CreateThread

退出

pthread_exit

ThreadExit

等待

pthread_join

WaitForSingleObject

互斥锁

创建

pthread_mutex_init

CreateMutex

销毁

pthread_mutex_destroy

CloseHandle

加锁

pthread_mutex_lock

WaitForSingleObject

解锁

pthread_mutex_unlock

ReleaseMutex

条件

创建

pthread_cond_init

CreateEvent

销毁

pthread_cond_destroy

CloseHandle

触发

pthread_cond_signal

SetEvent

广播

pthread_cond_broadcast

SetEvent / ResetEvent

等待

pthread_cond_wait / pthread_cond_timedwait

SingleObjectAndWait

但我还有一个问题:

4、主线程是否比默认创建的线程优先级更高?

我用如下测试代码及运行结果说明问题:

#include #include #include #include void Thread_1()

{

printf("%s  pid :0x%x, tid :0x%x \n",__func__,  getpid(), (int)pthread_self());

int i=0,j=0;

while(1)

{

for(j=1;j<5000000;j++)

{

}

//sleep(1); // 删除sleep,每个线程都全力运行!

i++;

printf("%s,  %d\n", __func__, i);

}

}

void Thread_2()

{

printf("%s  pid :0x%x, tid :0x%x \n",__func__,  getpid(), (int)pthread_self());

int i=0,j=0;

while(1)

{

for(j=1;j<5000000;j++)

{

}

//sleep(1);

i++;

printf("%s,  %d\n", __func__, i);

}

}

void Thread_3()

{

printf("%s  pid :0x%x, tid :0x%x \n",__func__,  getpid(), (int)pthread_self());

int i=0,j=0;

while(1)

{

for(j=1;j<5000000;j++)

{

}

//sleep(1);

i++;

printf("%s,  %d\n", __func__, i);

}

}

void Thread_main()

{

printf("%s  pid :0x%x, tid :0x%x \n",__func__,  getpid(), (int)pthread_self());

int i=0,j=0;

while(1)

{

for(j=1;j<5000000;j++)

{

}

//sleep(1);

i++;

printf("%s,  %d\n", __func__, i);

}

}

int main()

{

pthread_t ppid1,ppid2,ppid3;

printf("%s  pid :0x%x, tid :0x%x \n",__func__,  getpid(), (int)pthread_self());

pthread_create(&ppid1,NULL,(void *)Thread_1,NULL);

pthread_create(&ppid2,NULL,(void *)Thread_2,NULL);

pthread_create(&ppid3,NULL,(void *)Thread_3,NULL);

Thread_main();

return 0;

}

编译执行结果如下:

$gcc test.c -lpthread

$ ./a.out

删除sleep,每个线程都全力运行!

运行结果可以看出:主线程没有明显的级别优先。

应避免使用“父线程”和“子线程”的说法

main  pid :0x71c5, tid :0x65bfa720

Thread_2  pid :0x71c5, tid :0x64c4b700

Thread_main  pid :0x71c5, tid :0x65bfa720

Thread_1  pid :0x71c5, tid :0x6544c700

Thread_3  pid :0x71c5, tid :0x6444a700

Thread_main,  1

Thread_3,  1

Thread_1,  1

Thread_2,  1

Thread_main,  2

Thread_3,  2

Thread_1,  2

Thread_main,  3

Thread_2,  2

Thread_3,  3

Thread_main,  4

Thread_1,  3

Thread_2,  3

Thread_main,  5

Thread_3,  4

Thread_1,  4

Thread_main,  6

Thread_2,  4

Thread_3,  5

Thread_main,  7

Thread_1,  5

Thread_2,  5

Thread_3,  6

Thread_main,  8

Thread_1,  6

Thread_2,  6

Thread_main,  9

Thread_3,  7

Thread_1,  7

Thread_main,  10

Thread_2,  7

Thread_3,  8

Thread_main,  11

Thread_1,  8

Thread_2,  8

Thread_main,  12

Thread_3,  9

Thread_1,  9

Thread_2,  9

Thread_main,  13

Thread_3,  10

Thread_1,  10

Thread_main,  14

Thread_2,  10

Thread_3,  11

Thread_1,  11

Thread_main,  15

Thread_2,  11

Thread_3,  12

Thread_main,  16

Thread_1,  12

Thread_2,  12

Thread_main,  17

Thread_3,  13

Thread_2,  13

Thread_main,  18

Thread_3,  14

Thread_1,  13

Thread_2,  14

Thread_main,  19

Thread_3,  15

Thread_1,  14

Thread_2,  15

Thread_main,  20

Thread_3,  16

Thread_main,  21

Thread_2,  16

Thread_1,  15

Thread_main,  22

Thread_3,  17

Thread_2,  17

Thread_main,  23

Thread_1,  16

Thread_3,  18

Thread_2,  18

Thread_main,  24

Thread_1,  17

Thread_2,  19

Thread_3,  19

Thread_main,  25

Thread_3,  20

Thread_2,  20

Thread_main,  26

Thread_1,  18

Thread_main,  27

Thread_2,  21

Thread_3,  21

Thread_1,  19

Thread_main,  28

Thread_2,  22

Thread_3,  22

Thread_main,  29

Thread_1,  20

Thread_3,  23

Thread_2,  23

Thread_main,  30

Thread_1,  21

Thread_2,  24

Thread_3,  24

Thread_main,  31

Thread_1,  22

Thread_main,  32

Thread_3,  25

Thread_2,  25

Thread_main,  33

Thread_1,  23

Thread_2,  26

Thread_3,  26

Thread_main,  34

Thread_1,  24

Thread_3,  27

Thread_2,  27

Thread_main,  35

Thread_1,  25

Thread_2,  28

Thread_main,  36

Thread_3,  28

Thread_main,  37

Thread_1,  26

Thread_3,  29

Thread_2,  29

Thread_main,  38

Thread_1,  27

Thread_3,  30

Thread_main,  39

..........

Thread_main,  3736

Thread_2,  3671

Thread_1,  2888

Thread_main,  3737

Thread_3,  2840

Thread_2,  3672

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值