linux C线程


线程

头文件


#include <pthread.h>

创建一个线程


extern int pthreacreated_create (pthread_t *__restrict __newthread,
           const pthread_attr_t *__restrict __attr,
           void *(*__start_routine) (void *),
           void *__restrict __arg) __THROWNL __nonnull ((1, 3));

参数

  • 线程ID的指针

pthread_t *__restrict __newthread,

//  创建方式
pthread_t work_thread;
pthread_t wait_thread;
  • 线程属性设置

const pthread_attr_t *__restrict __attr,

//  创建属性
pthread_attr_t attr;       //线程属性设置
pthread_attr_init(&attr);
//将属性设置为joinable, 使主线程等待该线程执行完后,再结束主线程
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);   
  • 执行的线程函数 & 参数

//  函数参数
void *__restrict __arg) __THROWNL __nonnull ((1, 3));

//  创建传递线程参数的结构体
struct thread_para
{
    int sockfd;
    char *info;
};

thread_para thread_p;

//  函数指针
void *(*__start_routine) (void *),


//  创建线程函数
void *work_recv_thread(void *param)
{
    //  将传入的结构体强转类型
    thread_para *t_para = (thread_para* )param;
    ... ...
}

  • 创建线程

extern int pthread_create (pthread_t *__restrict __newthread,
           const pthread_attr_t *__restrict __attr,
           void *(*__start_routine) (void *),
           void *__restrict __arg) __THROWNL __nonnull ((1, 3));


创建一个线程
pthread_create(
    &work_thread,
    NULL,
    work_recv_thread,
    (void *)&thread_p);

  • 阻塞式(等待子线程运行完再结束主线程)

extern int pthread_join (pthread_t __th, void **__thread_return);

pthread_t __th  //  线程ID
void **__thread_return  //  返回的线程状态信息,类型为void*

//ex:
void *status;
pthread_join(
    wait_thread,
    &status
);

文章作者: bySouffle
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 bySouffle !
  目录