首页 >

linux有创建线程的函数吗

运维|linux运维linux有创建线程的函数吗
linux,创建线程,pthread_create函数
运维-linux运维
说说网源码,查看ubuntu默认终端,tomcat设置执行时间,股市新闻爬虫,关于php购物网站结论,东阳seo服务lzw
linux有创建线程的函数,那就是pthread_create()函数。
查看excel源码,彩虹屁vscode,ubuntu caff,tomcat JSP使用,sqlite查询所有的表,织梦相册插件,如何判定项目前端所用框架,爬虫抓取股市有用吗,linux 验证php,合肥整站seo优化,个人门户网站源码下载,css网页图片特效代码,微信支付登录页面模板lzw
pthread_create()是类Unix操作系统(Unix、Linux、Mac OS X等)中创建线程的函数
drp分销管理系统 源码,苹果手机可以使用vscode吗,ubuntu分区loop,tomcat+jsp根目录,matlab爬虫视频,php入门级框架,福州关键词seo排名外包lzw
头文件

#include

函数声明

int pthread_create(    pthread_t *restrict tidp,   //新创建的线程ID指向的内存单元。    const pthread_attr_t *restrict attr,  //线程属性,默认为NULL    void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行    void *restrict arg //默认为NULL。上述函数需要参数,将参数放入结构中并将地址作为arg传入。    );

返回值

若成功则返回0,否则返回出错编号

参数

第一个参数为指向线程标识符的指针。

第二个参数用来设置线程属性。

第三个参数是线程运行函数的地址。

最后一个参数是运行函数的参数。

注意

在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库。

函数用法

#include #include #include #include #include #include #include "main.h"using namespace std;struct Sample {    uint32_t index;    char sex;    uint32_t age;    uint32_t result;};void* TaskEntry(void *args){    Sample *sa = (Sample*)args;    uint32_t num = sa->index;    if (num == 0) {        printf("TaskEntry entry num = 0\n");  // 线程1执行体        sleep(10);        printf("TaskEntry entry num = 0 is over!!!\n");    } else if (num == 1) {        printf("TaskEntry entry num = 1\n");  // 线程2执行体        sleep(10);        printf("TaskEntry entry num = 1 is over!!!\n");    } else if (num == 2) {        printf("TaskEntry entry num = 2\n");  // 线程3执行体        sleep(2);        printf("TaskEntry entry num = 2 is over!!!\n");    }}uint32_t CreateTask(pthread_t& pid, Sample& sample){    // 假设Sample.index == 2创建任务失败,直接返回    if (sample.index == 2) {        return 2;    }    pthread_attr_t  attr;  // 设置线程属性    pthread_attr_init(&attr);    pthread_attr_setstacksize(&attr, 64 * 1024);  // 设置线程栈大小为64KB    uint32_t ret = pthread_create(&pid, &attr, (void*(*)(void*))TaskEntry, (void*)&sample);    if (ret != 0) {        return ret;    }    pthread_attr_destroy(&attr); // 取消线程的设置属性    return 0;}void VerifyTask(vector& taskID, vector& taskArgs){    void *ret;    for (int index = 0; index<2; index++) {        // 等待线程结束,释放相应的资源。pthread_join会堵塞主线程不会堵塞其他子线程,然后等待监控的线程执行完成,再返回主线程        // 在此处线程执行顺序为:线程1--主线程--线程2--主线程--线程3        pthread_join(taskID[index], &ret);  // 堵塞主线程,执行子线程taskID[index],等待子线程taskID[index]执行完成释放资源        printf("task[%d] is over\n", index);  // 主线程执行打印操作    }}int main(void){    // 创建3个线程    vector taskID(3);    vector taskArgs(3);    for (int i = 0; i < 3; i++) {        taskArgs[i] = { i, 'a', 90, 0};        uint32_t ret = CreateTask(taskID[i], taskArgs[i]);        if (ret != 0) {            // 模拟如下场景:任务创建失败,直接停止前面的任务            for (int j = 0; j<i; j++) {pthread_cancel(taskID[j]); // 子线程1和子线程2延迟10s,当线程3创建失败时,直接让其停止。            }            //return ret;  // 主线程退出,所有子线程一起退出        }    }    VerifyTask(taskID, taskArgs); // 校验线程是否结束    printf("three thead is running over!!!\n");    return 0;}

注意编译的使用需要加上编译选项-lpthread,比如:g++ -lpthread main.cpp -o main

《Linux视频教学》


linux有创建线程的函数吗
  • java中创建线程的三种方法是什么?
  • java中创建线程的三种方法是什么? | java中创建线程的三种方法是什么? ...

    linux有创建线程的函数吗
  • Linux内核是如何创建线程的,它与windows有哪些不同? - 网络|
  • Linux内核是如何创建线程的,它与windows有哪些不同? - 网络| | Linux内核是如何创建线程的,它与windows有哪些不同? - 网络| ...