首页 > 其他分享 >线程的创建和终止

线程的创建和终止

时间:2023-05-02 11:33:06浏览次数:28  
标签:include int 创建 void 线程 pthread 终止 NULL

 

拥有线程程序的编译需要加 -pthread

gcc a.c -o a -pthread

 

/*
        #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:给第三个参数传参,不需要传递参数,就传NULL
            返回值:
                成功:0
                失败:错误号,与之前的errno不一样
                    因此不能使用perror,使用strerror
                    
        void pthread_exit(void *retval);
            功能:终止一个线程,在哪个线程中调用,就表示终止哪个线程
            参数:
                retval:作为返回值,可以通过pthread_join()获取
                    不需要返回值,则添NULL

        pthread_t pthread_self(void);
            功能:获取线程id

        int pthread_equal(pthread_t t1, pthread_t t2);
            功能:判断两个线程id是否相等
*/

#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
void *callback(void* arg)
{
    printf("child thread\n");
    printf("%d\n", *(int *)arg);
    return NULL; // == pthread_exit(NULL);
}


int main()
{
    pthread_t thread;
    // int errno = pthread_create(&thread, NULL, callback, NULL);

    int num = 10;
    int errno = pthread_create(&thread, NULL, callback, (void *)&num);


    if(errno != 0)
    {
        printf("%s\n", strerror(errno));
        exit(-1);
    }
    for(int i = 0; i < 5; i++)
    {
        printf("%d\n", i);
    }

    sleep(1);

    pthread_exit(NULL);


    return 0;
}

 

标签:include,int,创建,void,线程,pthread,终止,NULL
From: https://www.cnblogs.com/WTSRUVF/p/17367486.html

相关文章

  • 创建pv时报错:Device /dev/sdb not found (or ignored by filtering).
    创建pv时报错:[root@PC1~]#pvcreate/dev/sdbDevice/dev/sdbnotfound(orignoredbyfiltering).解决:执行命令:ddif=/dev/urandomof=/dev/sdbbs=512count=64[root@PC1~]#ddif=/dev/urandomof=/dev/sdbbs=512count=64记录了64+0的读入记录了64+0的写出3276......
  • PVE 开始创建虚拟机
    Win10内存......
  • EF.Core 读取数据库创建实体类
    以SQLite为例1.新建wpf程序2.打开程序包管理器控制台3.输入:Install-PackageMicrosoft.EntityFrameworkCore.Tools4.输入:Install-PackageMicrosoft.EntityFrameworkCore.Sqlite5.输入:Scaffold-DbContext'DataSource=D:\kfdata.db;'Microsoft.EntityFrameworkCore.Sqlite ......
  • JAVA创建线程的方式总结
    1.继承Thread类通过继承Thread类,并重写它的run方法,就可以创建一个线程。publicclassTestThread1extendsThread{publicTestThread1(Stringname){super(name);}@Overridepublicvoidrun(){System.out.println(Thread.currentTh......
  • 线程池监控方案
    5ycode某信贷cto,专注于java技术研究与应用,包括JVM、DDD、软件设计、源码阅读、以及经验分享9篇原创内容公众号读了Java线程池实现原理及其在美团业务中的实践后,我就想一个问题,如果让我去做这个线程池的监控,我该怎么做?要对线程池进行监控,首先得明白,我们监控线程池的目的是什么?监控......
  • Java线程池中的四种拒绝策略
    CallerRunsPolicy:这是默认的拒绝策略,当线程池队列已满并且无法处理新任务时,将由提交任务的线程来执行该任务。这种策略可以降低新任务的流量,但也会增加提交任务的线程的负载。AbortPolicy:当线程池队列已满并且无法处理新任务时,将抛出RejectedExecutionException异常,阻止新任......
  • 线程安全
    1、前言 先看看下面的代码输出是什么:publicclassTestSyncimplementsRunnable{intb=100;synchronizedvoidm1()throwsInterruptedException{b=1000;Thread.sleep(500);//6System.out.println("b="+b);......
  • 从CPU的视角看 多线程代码为什么那么难写!
      当我们提到多线程、并发的时候,我们就会回想起各种诡异的bug,比如各种线程安全问题甚至是应用崩溃,而且这些诡异的bug还很难复现。我们不禁发出了灵魂拷问“为什么代码测试环境运行好好的,一上线就不行了?”。为了解决线程安全的问题,我们的先辈们在编程语言中引入了各种各样新名......
  • cocoa线程同步synchronized
    synchronized关键字   1.synchronized方法:通过在方法声明中加入synchronized关键字来声明synchronized方法。如:publicsynchronizedvoidaccessVal(intnewVal);synchronized方法控制对类成员变量的访问:每个类实例对应一把锁,每个synchroni......
  • 创建ORACLE JOB
    oraclejob简介主要的使用情景定时在后台执行相关操作:如每天晚上0点将一张表的数据保存到另一张表中,2:定时备份数据库等熟化说万事开头难,这里我只简单记述一个创建一个简单的job步骤如下:1、创建一张表g_testcreatetableG_TEST(ID    NU......