返回顶部
首页 > 资讯 > 操作系统 >Linux系统中如何创建线程
  • 261
分享到

Linux系统中如何创建线程

2023-06-28 13:06:23 261人浏览 独家记忆
摘要

小编给大家分享一下linux系统中如何创建线程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!线程创建在传统Unix进程模型中,每个进程只有一个控制线程。在POSI

小编给大家分享一下linux系统中如何创建线程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

线程创建

在传统Unix进程模型中,每个进程只有一个控制线程。在POSIX线程(pthread)的情况下,程序开始运行时,它也是以单进程中的单个控制线程启动的。在创建多个控制线程以前,程序的行为与传统的进程并没有什么区别。新增的线程可以通过调用pthread_create函数创建。

 #include  int pthread_create(pthread_t *restrict tidp,        const pthread_attr_t *restrict attr,        void *(*start_rtn)(void *), void *restrict arg); 12345

说明:当pthread_create成功返回时,新创建线程的线程ID会被设置成tidp指向的内存单元。attr参数用于定制各种不同的线程属性,目前设置为NULL,创建一个具有默认属性的线程。 新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg。如果需要想start_rtn函数传递的参数有一个以上,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。

例子

创建一个线程,打印进程ID、新线程的线程ID以及初始线程的ID。

 //GCc threadid.c -o a.out -pthread //pthread是linux下的线程库,用了多线程就要链接这个库,这时候要在编译选项上增加-pthread #include "apue.h" #include #include   pthread_t ntid;  void printids(const char *s) {  //声明进程id  pid_t  pid;  //声明线程id  pthread_t tid;  //获取进程id  pid = getpid();  //用pthread_self()获取自己线程id  tid = pthread_self();  printf("%s pid %lu tid %lu (0x%lx)\n", s, (unsigned long)pid,    (unsigned long)tid, (unsigned long)tid); }  void * thr_fn(void *arg) {  //调用上面的打印id函数  printids("new thread: ");  return((void *)0); }  int main(void) {  int  err;   //创建线程,主线程把新线程ID存放在ntid中,新线程去执行thr_fn函数  err = pthread_create(&ntid, NULL, thr_fn, NULL);  if (err != 0)   err_exit(err, "can't create thread");  printids("main thread:");  sleep(1);  exit(0); } 1234567891011121314151617181920212223242526272829303132333435363738394041424344

编译: gcc threadid.c -o a.out -pthread note:pthread是linux下的线程库,用了多线程就要链接这个库,这时候要在编译选项上增加-pthread

 main thread: pid 1518 tid 140627397551936 (0x7fe65e13a740) new thread:  pid 1518 tid 140627389191936 (0x7fe65d941700) 12

可以见到,两个线程地址是不一样的,但是pid父进程都是一样的。

另一个例子

主线程接受一个输入num,创建一个线程打印2*num。

 #include #include #include #include   // 返回值必须是void *(无类型指针),参数也必须是void * void *tfn(void *arg) {     //传进来的是(void *),强制类型转换     int num = (int)arg;     long d2num = 2*num;     printf("In thread %lu arg: %d.\n", (unsigned long)pthread_self(), num);     sleep(1);     printf("Thread over! arg: %d\n", num);     return  (void*)d2num; }  void main(int argc, char *argv[]) {     pthread_t tid;     long num;     void *tret; //获取线程终止状态     while(scanf("%ld", &num) == 1){         pthread_create(&tid, NULL, tfn, (void *)num);         //线程终止         pthread_join(tid, &tret);         printf("Thread exit code: %ld\n", (long)tret);     }      printf("Main thread %lu is over.\n", (unsigned long)pthread_self()); } 12345678910111213141516171819202122232425262728293031

因为在Unix环境高级编程的源代码里代码都是使用makefile链接的,小弟不懂,所以直接将代码copy到已有的文件名中跑了。 下面是结果: Linux系统中如何创建线程 可以看到结果:创建的线程和主线程id号是不一样的。 另外:我觉的在 pthread_create(&tid, NULL, tfn, (void *)num); 直接将num转为指针有点别扭,于是这样: pthread_create(&tid, NULL, tfn, (void *)&num); 然后在tfn函数中将: int num = (int)arg; 改为: int num = *(int*)arg; 也是可以的。

以上是“Linux系统中如何创建线程”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网操作系统频道!

--结束END--

本文标题: Linux系统中如何创建线程

本文链接: https://lsjlt.com/news/319655.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux系统中如何创建线程
    小编给大家分享一下Linux系统中如何创建线程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!线程创建在传统Unix进程模型中,每个进程只有一个控制线程。在POSI...
    99+
    2023-06-28
  • Linux系统如何创建线程
    这篇文章主要为大家展示了“Linux系统如何创建线程”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统如何创建线程”这篇文章吧。在创建多个控制线程以前,程序的行为与传统的进程并没有什么...
    99+
    2023-06-28
  • Linux系统怎么创建线程
    这期内容当中小编将会给大家带来有关Linux系统怎么创建线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。线程创建在传统Unix进程模型中,每个进程只有一个控制线程。在POSIX线程(pthread)的情...
    99+
    2023-06-28
  • Linux系统如何创建进程
    这篇文章主要为大家展示了“Linux系统如何创建进程”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统如何创建进程”这篇文章吧。fork    fork创建一个进程...
    99+
    2023-06-28
  • Linux系统中如何创建SSH别名
    这篇文章主要介绍了Linux系统中如何创建SSH别名,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。...
    99+
    2023-06-27
  • Linux系统中如何手动创建用户
    这篇文章给大家分享的是有关Linux系统中如何手动创建用户的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在Linux系统中创建用户方法非常简单,只需要使用useradd命令即可实现,但是大家知道如何手动创建一个新...
    99+
    2023-06-27
  • win7系统如何创建无线连接
    这篇文章将为大家详细讲解有关win7系统如何创建无线连接,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先我们在开始搜索框中输入cmd然后看到cmd.exe后右键以管理员身份进入,因为普通的开始运行cmd...
    99+
    2023-06-28
  • Linux系统如何创建Shell脚本
    这篇文章主要介绍了Linux系统如何创建Shell脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 创建文件并编辑在目录中创建名为build.sh的shell脚本文件,...
    99+
    2023-06-28
  • Linux系统如何创建软连接
    小编给大家分享一下Linux系统如何创建软连接,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、创建1、创建软链接 ln -s 【目...
    99+
    2023-06-28
  • Linux系统如何创建.sh文件
    小编给大家分享一下Linux系统如何创建.sh文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创建方法如下:1、touch hello.sh2、vim hell...
    99+
    2023-06-28
  • linux系统如何创建ftp用户
    这篇文章将为大家详细讲解有关linux系统如何创建ftp用户,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ftp简介:FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP...
    99+
    2023-06-28
  • 如何在java中创建线程
    本篇文章为大家展示了如何在java中创建线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4....
    99+
    2023-06-14
  • Python中如何创建多线程?
    目录一、python线程的模块1.thread和threading模块2. Queue模块3.注意模块的选择二、Threading模块三、通过Threading.Thread类来创建...
    99+
    2023-01-06
    python 创建多线程 Python多线程编程 python多线程开发
  • ​linux中怎么创建多线程
    这篇文章主要介绍了linux中怎么创建多线程的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux中怎么创建多线程文章都会有所收获,下面我们一起来看看吧。linux线程分为两...
    99+
    2024-04-02
  • Linux系统如何创建多级目录
    这篇文章主要为大家展示了“Linux系统如何创建多级目录”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统如何创建多级目录”这篇文章吧。mkdir的-p选项允许你一次性创建多层次的目录...
    99+
    2023-06-28
  • Linux系统如何创建桌面快捷
    这篇文章主要介绍了Linux系统如何创建桌面快捷,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用命令行创建桌面快捷方式要为特定程序或命令创建桌面快捷方式,你可以使用任意文本...
    99+
    2023-06-28
  • Linux Fedora 8系统安装过程中如何创建一个IE
    这篇文章给大家分享的是有关Linux Fedora 8系统安装过程中如何创建一个IE的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.安装准备目前,要在 Linux Fedora 8中运行 IE,Wine 是免不...
    99+
    2023-06-16
  • java如何创建线程
    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建...
    99+
    2016-03-22
    java基础 java 线程
  • 如何在python中创建多线程
    今天就跟大家聊聊有关如何在python中创建多线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几...
    99+
    2023-06-14
  • 如何在python中创建新线程
    如何在python中创建新线程?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作