博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux多线程2-1---创造新线程
阅读量:6273 次
发布时间:2019-06-22

本文共 1342 字,大约阅读时间需要 4 分钟。

一、线程的ID
pthread_t:结构体(FreeBSD5.2、Mac OS10.3)/unsigned long int(linux)
                /usr/include/bits/pthreadtypes.h
获取线程ID:pthread_self()
一个实例:获取主线程ID

点击(此处)折叠或打开

  1. #include "apue.h"
  2. int main()
  3. {
  4.     pid_t pid;
  5.     pthread_t tid;
  6.     pid = getpid();
  7.     tid = pthread_self();
  8.     printf("pid is %u, tid is %x\n", pid, tid);
  9.     return 0;
  10. }
思考:线程ID出了进程范围还有效吗?
二、创造新线程
int pthread_create(pthread_t *restrict tidp, 
                             const pthread_attr_t *restrict attr, 
                             void *(*start_routine)(void *), 
                             void *restrict arg)
第一个参数:新线程的id,如果成功则新线程的id回填充到tidp指向的内存
第二个参数:线程属性(调度策略,继承性,分离性...)
第三个参数:回调函数(新线程要执行的函数)
第四个参数:回调函数的参数
返回值:成功返回0,失败则返回错误码
编译时需要连接库libpthread
实例:创建线程,打印ID
程序框图

点击(此处)折叠或打开

  1. /*AUTHOR:    WJ
  2.  *DATE:        2015-3-18
  3.  *
  4.  *
  5.  *getpid()            获取进程ID
  6.  *pthread_self()    获取ID
  7.  *
  8.  *int pthread_create(pthread_t *thread,
  9.  *                     const pthread_attr_t *attr,
  10.  *                     void *(*start_routine) (void *),
  11.  *                 void *arg);
  12.  *第一个参数,新线程id,创建成功系统回填
  13.  *第二个参数,新线程到属性,NULL为默认属性
  14.  *第三个参数,新线程到启动函数
  15.  *第四个参数,传递给新线程
  16.  */
  17. #include "apue.h"
  18. void print_id(char *s)
  19. {
  20.     pid_t pid;
  21.     pthread_t tid;
  22.     pid = getpid();
  23.     tid = pthread_self();
  24.     printf("%s pid is %u, tid is 0x%x\n", s, pid, tid);
  25. }
  26. void *thread_fun(void *arg)
  27. {
  28.     print_id(arg);
  29.     return (void *)0;
  30. }
  31. int main()
  32. {
  33.     pthread_t ntid;
  34.     int err;
  35.     err = pthread_create(&ntid, NULL, thread_fun, "new thread");
  36.     if(err != 0 )
  37.     {
  38.         printf("create new thread failed\n");
  39.         return 0;
  40.     }
  41.     
  42.     print_id("main thread :");
  43.     sleep(2);
  44.     return 0;
  45. }

转载地址:http://cfmpa.baihongyu.com/

你可能感兴趣的文章
App 卸载记录
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
计算机网络与Internet应用
查看>>
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!
查看>>
点播转码相关常见问题及排查方式
查看>>
[arm驱动]linux设备地址映射到用户空间
查看>>
弗洛伊德算法
查看>>
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>