首页 > 其他分享 >多线程

多线程

时间:2023-02-23 13:23:02浏览次数:30  
标签:多线程 void NULL 线程 pthread include id

介绍

获得线程号

#include <pthread.h>

pthread_t pthread_self(void);

功能:得到线程 id

参数:无

返回值:调用此函数的线程 id

创建线程

#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);

功能:创建线程

参数:

  • thread:传出参数,线程创建成功会将线程 id 写入该指针指向的内存中
  • attr:线程的属性,一般使用默认属性,传入 NULL
  • start_routine:创建的子线程的工作函数
  • arg:工作函数的参数

返回值:

  • 成功返回 0
  • 失败返回对应错误号

线程退出

#include <pthread.h>

void pthread_exit(void *retval);

功能:线程退出,并且不会影响到其他线程运行,不管是在子线程或主线程都可以使用

参数:

  • retval:线程退出时携带的数据,当前子线程的主线程会得到。不需要的话传入 NULL

返回值:无

回收线程

#include <pthread.h>

int pthread_join(pthread_t thread, void **retval);

功能:阻塞函数,回收子线程资源

参数:

  • thread:要被回收的子线程 id
  • retval:二级指针,指向一级指针的地址,传出参数,储存了 pthread_exit 传递的数据,可指定为 NULL

返回值:

  • 成功返回 0
  • 失败返回错误号

分离线程

#include <pthread.h>

int pthread_detach(pthread_t thread);

功能:子线程可以和主线程分离,当子线程退出时,其占用的内核资源被系统的其他进程接管并回收

参数:

  • thread:要分离的线程 id

返回值:

  • 成功返回 0
  • 失败返回错误号

简单使用

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

void * work(void *arg)
{
    printf("我是子线程 id:%ld\n", pthread_self());
    for (int i = 0; i < 5; i++) {
        printf("child : %d\n", i);
	}
    
    pthread_exit(NULL);
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, NULL, work, NULL);
    
    printf("我是主线程 id:%ld,我创建子线程 id:%ld\n", pthread_self(), tid);
    
    for (int i = 0; i < 10; i++) {
        printf("parent : %d\n", i);
    }
    
    pthread_exit(NULL);
    
    // return 0;
}

注意事项

  • 编译选项要加上 -lpthread

标签:多线程,void,NULL,线程,pthread,include,id
From: https://www.cnblogs.com/cong0221/p/17147592.html

相关文章

  • java socket网络编程(多线程技术)
    Client.javaimportjava.io.*;importjava.net.*;importjava.util.*;publicclassClient{publicstaticvoidmain(Stringargs[]){Scannerscann......
  • 创建多线程方式3:实现Callable接口 改造下载图片案例
    packagecom.Test;importorg.apache.commons.io.FileUtils;importjava.io.File;importjava.io.IOException;importjava.net.URL;importjava.util.concurrent.*;//开......
  • Java多线程技能-方法介绍
    java多线程技能技术点:线程的启动如何使线程暂停如何使线程停止线程的优先级线程安全相关的问题方法currentThread()currentThread()方法可返回代码段正在被哪......
  • 多线程 龟兔赛跑案例
    packagecom.Java;publicclassRaceimplementsRunnable{//胜利者privatestaticStringwinner;@Overridepublicvoidrun(){for(inti=0......
  • java多线程:详解JUC
    对应狂神说JUC视频1.JUC是什么java.util下的几个包的简称涉及到多线程的开发java.util.concurrentjava.util.atomicjava.util.concurrent.locks2.线程和进程进程:多个程序......
  • Java的多线程+Socket
    客户端: packagecom.wulala;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net......
  • Python 多线程中的 Join Lock 和 Event
    Join函数的作用Join函数的作用主要是提供当前线程阻塞,等待线程结束后,在执行下一个线程,保护线程通畅有序执行如下当没有使用join时,主线程结束了子线程还在运行defd......
  • 【多线程】定位线程死锁
    定位线程死锁的方式jstackpid使用arthas写一个死锁的小例子importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.CountDownLatch;imp......
  • Java多线程技能-线程的启动
    java多线程技能技术点:线程的启动如何使线程暂停如何使线程停止线程的优先级线程安全相关的问题进程和线程的定义及多线程的优点进程:进程是受操作系统管理的基本......
  • Redis IO多线程的简要测试结果
    RedisIO多线程的简要测试结果摘要最近想简单确认一下IO多线程的对吞吐量的提升情况.正好手头有鲲鹏的机器,所以想直接进行一下验证顺便用一下4216进行一下对比.......