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. CF1705A Mark the Photographer 题解

    题意: 给定一队人的身高,将其分成两队,问能否实现前面的人均低于后面的人至少 \(x\) 个单位长度. 做法: 将这队人的身高进行排序,\(h_1 \sim h_n\) 即为第一队,\(h_{n+1} ...

  2. 第二十一天python3 python的正则表达式re模块学习

    python的正则表达式 python使用re模块提供了正则表达式处理的能力: 常量 re.M re.MULTILINE 多行模式 re.S re.DOTALL 单行模式 re.I re.IGNORE ...

  3. 第十六天python3 文件IO(二)

    BytesIO操作 io模块中的类 from io import BytesIO 内存中,开辟的一个二进制模式的buffer,可以像文件对象一样操作它: 当close方法被调用的时候,这个buffer ...

  4. 使用uni-app 地图组件

    首先,官方文档:https://uniapp.dcloud.io/component/map.html so,easy 但是没什么用~--~,太简单了 uni-app一般内置的使用的是腾讯地图,这个组 ...

  5. python不同平台进程的启动与终止

    Liunx进程的启动与终止 在使用subprocess创建进程时需要将所有进程设置为一个进程组 preexec_fn:只在 Unix 平台下有效,用于指定一个可执行对象(callable object ...

  6. 【MySQL 8】Generated Invisible Primary Keys(GIPK)

    从MySQL 8.0.30开始,MySQL支持在GIPK模式下运行时生成不可见的主键.在这种模式下运行时,对于任何在没有显式主键的情况下创建的InnoDB表,MySQL服务器会自动将生成的不可见主键 ...

  7. Nmap 操作手册 - 完整版

    目录 Nmap - 基础篇 Nmap 安装 RedHat Windows Debina & Ubuntu Others Linux Nmap 参数(简单版) 目标说明 主机发现 扫描技术 端口 ...

  8. 内存问题难定位,那是因为你没用ASAN

    摘要:ASAN全称:Address Sanitizer,google发明的一种内存地址错误检查器.目前已经被集成到各大编译器中. 本文分享自华为云社区<内存定位利器-ASAN使用小结>,作 ...

  9. JAVA语言基础组成(2)

    函数  函数的定义 1.什么是函数? 函数就是定义在类中的具有特定功能的一段独立小程序.函数也称为方法. 2.函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.. ...

  10. 高效能团队的Java研发规范(进阶版)

    目前大部分团队是使用的阿里巴巴Java开发规范,不过在日常开发中难免遇到覆盖不到的场景,本文在阿里巴巴Java开发规范基础上,补充一些常用的规范,用于提升代码质量及增强代码可读性. 编程规约 1.基础 ...