首页 > 系统相关 >Linux线程

Linux线程

时间:2024-11-14 16:29:35浏览次数:1  
标签:int void Linux t1 线程 pthread include

线程

1.1 线程概述

1.2 线程常用API

image

线程方法使用

创建线程

#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
//返回值:若成功返回0,否则返回错误编号

详情介绍:
  当pthread_create成功返回时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于定制各种不同的线程属性,暂可以把它设置为NULL,以创建默认属性的线程。

  新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg。如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。

3.线程等待

线程被阻塞

#include <pthread.h>
int pthread_join(pthread_t thread, void **rval_ptr);
// 返回值:若成功返回0,否则返回错误编号


调用这个函数的线程将一直阻塞,直到指定的线程调用pthread_exit、从启动例程中返回或者被取消。如果线程简单地从它的启动例程返回,rval_ptr将包含返回码。如果线程被取消,由rval_ptr指定的内存单元就置为PTHREAD_CANCELED。

  可以通过调用pthread_join自动把线程置于分离状态,这样资源就可以恢复。如果线程已经处于分离状态,pthread_join调用就会失败,返回EINVAL。

4.线程ID获取及比较

#include <pthread.h>
pthread_t pthread_self(void);
//返回值:调用线程的ID

创建线程并且打印出它的id
demo.cpp

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void *func1(void *arg)
{
    printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
    // 将void*强制转换成int*然后解引用
    printf("t1:param is %d\n",*((int*)arg));
}


int main()
{
    int ret;
    int param = 100;
    pthread_t t1;

   // int *pret = NULL;
    int pret;
    ret = pthread_create(&t1,NULL,func1,(void*)&param);

    if(ret==0)
    {
        printf("main:create t1 success\n");
    }

    // 等待线程结束后退出
    pthread_join(t1,(void**)&pret);

    printf("main:t1 quit:%d\n",pret);

    return 0;

}

编译执行

g++ -o demo demo.cpp   -pthread

编译 C++ 程序时,-pthread 是一个编译器选项,用于告诉编译器链接 POSIX 线程库,也就是通常所说的线程库。在 Linux 系统中,这个选项是编译多线程程序时必须的。

当你在编译命令中加入 -pthread 选项时,它通常需要出现在编译命令的两个地方:

在编译(但不链接)时,例如 g++ -pthread -c demo.cpp,这告诉编译器包含线程相关的代码和头文件。
在链接时,例如 g++ -pthread demo.o -o demo,这告诉链接器链接线程库。

image

标签:int,void,Linux,t1,线程,pthread,include
From: https://www.cnblogs.com/hellojianzuo/p/18546303

相关文章

  • Linux基础入门2
    建议先看一声明:学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。本文只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频微信公众号:泷羽sec文件系统权限Linux系统中一切都是文件1.查看权限ls......
  • 原子类保证多线程环境下的数据安全的示例
    原子类保证多线程环境下的数据安全的示例 1、原子整型类保证多线程环境下的数据安全示例:packagecom.joyupx.cms.example.thread.concurrent.atomic;importlombok.extern.slf4j.Slf4j;importjava.util.concurrent.atomic.AtomicInteger;/***原子性操作*多线程......
  • 揭秘黑客手法:如何通过密码搜寻在 Linux 系统中实现权限提升
    文章目录前言1、密码搜寻–文件名和文件内容1.1、寻找有趣的文件名1.2、寻找有趣的字符串2、密码搜寻–Web文件/Config文件2.1、Config文件中的密码2.2、Web文件中的密码2.2.1、使用Hashcat破解密码3、密码搜寻–隐藏文件/文件夹3.1、隐藏文件/文件夹中的......
  • Linux 磁盘、分区、文件系统、挂载
    1、磁盘Linux所有设备都被抽象成为一个文件,保存在/dev目录下。设备名称一般为hd[a-z]或sd[a-z]。如果电脑中有多硬盘,则设备名依次为sda、adb、sdc...以此类推IDE设备的名称为hd[a-z]。SATA、SCSI、SAS、USB等设备的名称称为sd[a-z]。 2、分区在Linux中,使用备名称+分区号......
  • Java线程的sleep和wait的区别
        在Java中,Thread.sleep()和Object.wait()都可以让线程暂停执行,但是它们的作用机制和使用场景是不同的。下面是这两个方法的主要区别:Thread.sleep(longmillis,intnanos)参数:millis 是毫秒数,nanos 是额外的纳秒数(0到999,999之间)。行为:当前线程将暂停执行至少......
  • 《Linux从小白到高手》综合应用篇:深入详解Linux swap及其调整优化
    1.引言:Swap是存储设备上的一块空间(分区),操作系统可以在这里暂存一些内存里放不下的东西。这从某种程度上相当于增加了服务器的可用内存。虽然从swap读写比内存慢,但总比没有好,算是内存不足时一种比较不错的解决方案。如果没有swap,则服务器一旦内存不足,就会开始终止应用以释......
  • linux系统文件打开数
    查看总的文件打开数lsof查看占用文件打开数最多的10个进制lsof|awk'{print$2}'|sort|uniq-c|sort-nr|head-n10#lsof|awk'{print$2}'|sort|uniq-c|sort-nr|head-n1031171104281139810061076110053836100435002144......
  • linux系统so动态库的搜索路径
    so动态库的搜索路径搜索的先后顺序编译目标代码时指定的动态库搜索路径环境变量LD_LIBRARY_PATH指定的动态库搜索路径配置文件/etc/ld.so.conf中指定的动态库搜索路径默认的动态库搜索路径/lib默认的动态库搜索路径/usr/libgcc编译指定动态库搜索路径-Wl,-rpath=<动态库......
  • Linux 服务器迁移步骤
    LearnhowtomigrateyourLinuxVPSfromanoldservertoanewonewiththisstep-by-stepguide.Discoveressentialtechniques,tools,andbestpracticesforasmoothservermigration.WhenitcomestomigratingyourVPS,therearenumerousapproachesav......
  • 【多线程奇妙屋】你听说过设计模式吗?软件开发中可全局访问一个对象的设计模式——单例
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......