pthread.h 线程部分 源码解读

29 篇文章 0 订阅
int pthread_create (pthread_t *__restrict __newthread,
			   const pthread_attr_t *__restrict __attr,
			   void *(*__start_routine) (void *)

创建线程

void pthread_exit (void *__retval)

退出线程

int pthread_join (pthread_t __th, void **__thread_return)

等待线程结束

int pthread_tryjoin_np (pthread_t __th, void **__thread_return)

尝试等待线程结束

int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
				 const struct timespec *__abstime);

在指定的时间内等待线程的结束

int pthread_detach (pthread_t __th)

分离线程

pthread_t pthread_self (void)

获得当前线程的identity

int pthread_equal (pthread_t __thread1, pthread_t __thread2)

判断两个线程 identity 是否相同

int pthread_attr_init (pthread_attr_t *__attr)

初始化一个线程属性

int pthread_attr_destroy (pthread_attr_t *__attr)

销毁一个线程属性

int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
					int *__detachstate)

获得线程identity 的 detach 状态

int pthread_attr_setdetachstate (pthread_attr_t *__attr,
					int __detachstate)

设置线程identity 的 detach 状态

int pthread_attr_getguardsize (const pthread_attr_t *__attr,
				      size_t *__guardsize)

获得线程属性 的 溢出守护区域 大小

int pthread_attr_setguardsize (pthread_attr_t *__attr,
				      size_t __guardsize)

设置线程属性 的 溢出守护区域大小

int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
				       struct sched_param *__restrict __param)

获得线程属性 调度参数

int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
				       const struct sched_param *__restrict
				       __param)

设置线程属性 调度参数

int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
					__attr, int *__restrict __policy)

获得线程属性 调度策略

int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)

设置线程属性 调度策略

可以获得和设置的属性
inheritsched		继承的
scope				范围
stackaddr			栈地址
stacksize			栈大小
		
int pthread_getattr_default_np (pthread_attr_t *__attr)

获得 默认的线程属性

int pthread_setattr_default_np (const pthread_attr_t *__attr)

设置 默认的线程属性

int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)

使用当前已经在运行的一个线程去初始化一个 线程属性。即获得该线程使用的线程属性。

int pthread_setschedparam (pthread_t __target_thread, int __policy,
				  const struct sched_param *__param)

设置调度策略参数

int pthread_getschedparam (pthread_t __target_thread,
				  int *__restrict __policy,
				  struct sched_param *__restrict __param)

获得调度策略属性

int pthread_setschedprio (pthread_t __target_thread, int __prio)

为指定的线程设置 优先级

int pthread_getname_np (pthread_t __target_thread, char *__buf,
			       size_t __buflen)

获得线程内部的 别名

int pthread_setname_np (pthread_t __target_thread, const char *__name)

设置线程内部的 别名

int pthread_getconcurrency (void)

获得并发性等级

int pthread_setconcurrency (int __level)

设置并发性等级

int pthread_yield (void)

产生一个线程给另外一个 线程或者进程去使用

int pthread_once (pthread_once_t *__once_control,
			 void (*__init_routine) (void))

保证使用同一个once_control 标记的 init_routine 函数,在多线程调用该函数的时候只会执行一次

int pthread_setcancelstate (int __state, int *__oldstate);

为当前线程设置可撤销的状态

int pthread_setcanceltype (int __type, int *__oldtype);

为当前线程设置可撤销的类型

int pthread_cancel (pthread_t __th);

立刻撤销指定的线程或者等到下次 可撤销的状态

void pthread_testcancel (void);

尝试撤销当前的线程

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于pthread.h是一个标准头文件,其实现可能会因平台和系统而异。以下是Linux系统中pthread.h的部分代码,仅供参考: ```c #ifndef _PTHREAD_H #define _PTHREAD_H 1 #include <features.h> #include <sched.h> #include <signal.h> #include <stddef.h> #include <time.h> #include <bits/pthreadtypes.h> #include <bits/sched.h> #ifdef __cplusplus extern "C" { #endif /* 线程属性类型 */ typedef struct __pthread_attr_s { size_t __size; int __detachstate; int __schedpolicy; struct sched_param __schedparam; int __inheritsched; int __scope; size_t __guardsize; int __stackaddr_set; void *__stackaddr; size_t __stacksize; } pthread_attr_t; /* 线程类型 */ typedef struct __pthread_s { unsigned long int __pthread_private; } *pthread_t; /* 互斥锁类型 */ typedef struct { int __lock; unsigned int __count; int __owner; } pthread_mutex_t; /* 条件变量类型 */ typedef struct { int __g_signals; int __g_waiters; pthread_mutex_t __g_mutex; int __g_broadcast_seq; int __g_waiters_seq; unsigned int __g_reserved[4]; } pthread_cond_t; /* 锁初始化 */ #define PTHREAD_MUTEX_INITIALIZER {0, 0, 0} /* 线程属性初始化 */ #define PTHREAD_ATTR_DEFAULT ((pthread_attr_t) {0, 0, 0, {0}, 0, 0, 0, 0, NULL, 0}) /* 函数声明 */ int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate); int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param); int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched); int pthread_attr_setscope(pthread_attr_t *attr, int scope); int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize); int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr); int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate); int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy); int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param); int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched); int pthread_attr_getscope(const pthread_attr_t *attr, int *scope); int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize); int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr); int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize); int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); int pthread_join(pthread_t thread, void **retval); int pthread_detach(pthread_t thread); int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); int pthread_mutex_destroy(pthread_mutex_t *mutex); int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); int pthread_cond_destroy(pthread_cond_t *cond); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime); #ifdef __cplusplus } #endif #endif /* _PTHREAD_H */ ``` 这里只列举了部分常用函数和类型的声明,具体实现可以在系统的pthread库中找到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值