1.pthread_create


Linux中线程创建用pthread_create函数

#include <pthread.h>
int pthread_create(
pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg
);

参数:

1.指向线程标识符的指针

2.指向线程属性的指针

3.指向线程函数的指针,该函数返回值类型和参数类型均为void  *

4.指向线程函数参数的指针

返回值:

成功创建返回0

创建失败返回错误编号

一个简单的例子:

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

void* func(void* param)
{
printf("Child thread ...\n"); pthread_exit(0);
}
int main(void)
{
pthread_t tid; pthread_create(&tid,NULL,func,NULL); sleep(1); return 0;
}

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

pthread_exit()函数是线程退出函数。注意,主线程加了sleep(1),这是让主线程等待1秒,让子线程执行完。如果没有的话,很可能看不到输出,这是因为子线程没执行完,父线程可能已经退出了,影响子线程的执行。

2.pthread_join


上面用到sleep()函数让父线程等待子线程。但是线程中通常使用pthread_join函数,让父线程等待子线程执行完

#include <pthread.h>

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

参数:线程号,指向返回值的指针

返回值:成功返回0,失败返回错误编号

一个例子:给子线程传递一个数x,计算并返回1+2+...+x的结果,让父进程输出

#include <stdio.h>
#include <pthread.h> void* func(void* param)
{
int x = *(int *)param; int sum = 0;
for(int i=1;i<=x;i++)
{
sum+=i;
}
return (void *)sum;
}
int main(void)
{
pthread_t tid; int x = 10; pthread_create(&tid,NULL,func,(void *)&x); void* sum; pthread_join(tid,&sum); printf("sum = %d\n",(int)sum); return 0; }

Linux下多线程创建的更多相关文章

  1. Linux下SVN创建新的项目

    Linux下SVN创建新的项目   Linux环境下的SVN创建新的项目 一.前置条件: 1)有安装了linux系统的服务器,123.*.*.29 2)服务器上安装了svn,本人服务器的svn的数据安 ...

  2. [转载]解决linux 下多线程错误 undefined reference to `sem_init'

    转自:https://blog.csdn.net/yzycqu/article/details/7396498?utm_source=copy 解决linux 下多线程错误 undefined ref ...

  3. Linux下如何创建新用户

    Linux下如何创建新用户 Linux系统中,只有root用户有创建其他用户的权限.创建过程如下:   useradd -d /home/newuser newuser(设定了该用户的主目录和用户名) ...

  4. Linux下多线程编程

    一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...

  5. Linux下多线程下载工具myget

    [root@superdba ~]# mytgetMytget 0.0.99: A download accelerator for GNU/LinuxUsage: mytget [options]. ...

  6. Linux下多线程复制文件(C)

    Linux下实现多线程文件复制,使用<pthread.h>提供的函数: int pthread_create(pthread_t *thread,const pthread_attr_t ...

  7. Linux下多线程下载工具 - Axel

    Axel 是 Linux 下一个不错的HTTP/FTP高速下载工具.支持多线程下载.断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件.适合网速不给力时多线程下载提高下载速度.比如在国 ...

  8. Axel linux下多线程下载工具

    Axel 是 Linux 下一个不错的HTTP/FTP高速下载工具.支持多线程下载.断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件.适合网速不给力时多线程下载提高下载速度.比如在国 ...

  9. linux下多线程互斥量实现生产者--消费者问题和哲学家就餐问题

    生产者消费者问题,又有界缓冲区问题.两个进程共享一个一个公共的固定大小的缓冲区.其中一个是生产者,将信息放入缓冲区,另一个是消费者,从缓冲区中取信息. 问题的关键在于缓冲区已满,而此时生产者还想往其中 ...

随机推荐

  1. rust实现http时如何读取一个完整的request

    用stream.read_to_end是不行的,tcpstream不是文件没有明确的结束符 需要先读取http header节,再找Content-Length header,然后读取body. 这是 ...

  2. MGR的gtid_executed不连续的问题分析

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1.问题描述 在做MGR测试的时候偶尔遇到gtid_executed事务ID不连续的问题,但是并不影响数据库的正常运行.现 ...

  3. Spring MVC组件之HandlerMapping

    Spring MVC组件之HandlerMapping HandlerMapping概述 HandlerMapping组件的作用解析一个个Request请求,并找到相应处理这个Request的Hand ...

  4. Luogu2798 爆弹虐场 (二分,Kruskal)

    二分答案,判定连通性 #include <iostream> #include <cstdio> #include <cstring> #include <a ...

  5. Windows 电脑杀毒简单有效的方式

    Windows 电脑杀毒通常会选择杀毒软件,这样太笨重,且容易占内存和存在流氓软件侵入. 推荐使用 Windows 自带的恶意软件删除工具 按住 Win + R 键,弹出运行窗口,输入 mrt. 系统 ...

  6. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  7. Unhandled Exception: MissingPluginException(No implementation found for method launch on channel)

    在添加依赖包时,可能会出现Unhandled Exception: MissingPluginException(No implementation found for method launch o ...

  8. python金牌班第五周周末总结

    python金牌班第五周周末总结 常见内置函数 1.abs # 求绝对值,将负数变为整数,并且得出的值只有正数print(abs(-999)) # 999 2.all # 当在经历条件判断时所有的返回 ...

  9. Math_Music

    查看代码 #REmoo的优化任务 #1.公式写在<formula_set>类中,统一管理 --- Finished 2022.8.15 12:39 #2.建立<sample_set& ...

  10. 【SWIFT】从零开始的SWIFT语言学习笔记-2:简单值、数组与字典

    1.0.3 简单值.数组与字典 知识点: 使用var创建变量 var myVariable = 65 myVariable = myVariable + 1 使用let创建常量 let myConst ...