总结: linux下的多线程API (POSIX线程)

本文详细介绍了Linux下使用POSIX线程(pthread)进行多线程编程的相关知识,包括线程创建、属性设置、线程分离、线程等待、互斥体和条件变量的使用等,并提供了示例代码,帮助理解线程间的同步和通信机制。
摘要由CSDN通过智能技术生成

 

POSIX线程:

一个完成的线程/进程包括三部分,代码+数据+内存栈;子线程和子进程在被创建的时候,

对于fork()创建子进程,三部分都要复制一份,数据包括比如文件描述符,虚拟内存,子进程关闭文件描述符不会影响父进程中的描述符;

对于pthread_create()创建子线程的时候,只有内存栈被复制,其他的部分(代码,数据都是共享的),如果一个线程改变了某变量的值,其他所有的线程都调用的是改变之后的值;

头文件#include <pthread.h>

编译参数: -lpthread

 

 

(一)涉及到的类型:

  pthread_t, pthread_attr_t, pthread_cond_t, pthread_mutexattr_t, void* (*)(void*), 

 

(二)涉及到的函数:

 

  pthread_cancel,pthread_wait,

  pthread_create, pthread_self, pthread_detach, pthread_join, pthread_exit, 

  pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock, pthread_mutex_destory; //参数都是pthread_mutex_t*

  int pthread_attr_init(pthread_attr_t*), int pthread_attr_destory(pthread_attr_t*),

  int pthread_attr_setdetachstatus(pthread_attr_t*,int); //设置属性

  int pthread_attr_getdetacstatus(const pthread_attr_t*, int*); //获取属性

  pthread_cond_wait,pthread_cond_timewait,pthread_cond_signal,pthread_cond_broadcast,pthread_cond_destory; 

 

  1.设置线程属性:

    一个线程属性对象,(例如pthread_attr_t attr_test),可以创建很多线程,创建线程之后没有必要保持此对象;

    在线程的所有属性中,最重要的是分离属性(detach status),一个线程可以是等待线程(joinable thread)or分离线程(detach thread),默认是joinable thread;

    对于一个非分离(joinable)线程, 类似于进程中的Zombies进程,joinbale thread在退出后,资源不会被立刻释放,直到被thread_join获取它的返回值;

    对于一个分离(detach)线程在退出之后, 资源会被立刻释放, 其他线程无法获悉其返回值;

    代码例子,main线程中:

 

    pthread_attr_t attr;      //(1)创建变量: 

    phtread_attr_init(&attr); //(2)初始化此属性变量;

    pthread_setdetachstatus(&attr,PTHREAD_CREATED_DETACHED);//(3)

    pthread_create(&t,&attr,&function,NULL);//(4)创建线程;

    pthread_destory(&attr);//(5)创建完后,即可销毁此属性变量;

    pthread_join(t,NULL); //错误!分离的线程无法被join

    return; //main线程结束

 

  2.创建线程:

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

     其中pthread_attr_t*和void* arg可设置为NULL;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值