linux 线程接口函数

 pthread_t 在头文件/usr/include/bits/pthreadtypes.h中定义

typedef unsigned long int pthread_t;

编译多线程程序时,需要 libpthread.a, 所以要使用 -lpthread 选项。

创建线程函数

       #include <pthread.h>

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

线程结束的两种方式

线程退出函数:

       #include <pthread.h>

       void pthread_exit(void *retval);

等待线程结束函数:

       #include <pthread.h>

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

pthread_join() 函数是一个阻塞函数,调用该函数的函数会被阻塞,直到被等待的线程执行结束为止,当函数返回时,被等待的线程资源将被系统回收。

pthread_exit() 和 pthread_join() 是线程退出的2种结束方式。

线程属性

线程属性 pthread_attr_t

union pthread_attr_t                                                                                                                                       
{
  char __size[__SIZEOF_PTHREAD_ATTR_T];
  long int __align;
};
#ifndef __have_pthread_attr_t
typedef union pthread_attr_t pthread_attr_t;
# define __have_pthread_attr_t 1
#endif

线程属性的初始化和销毁函数

       #include <pthread.h>

       int pthread_attr_init(pthread_attr_t *attr);
       int pthread_attr_destroy(pthread_attr_t *attr);

线程属性不能直接设置, 要通过函数间接执行相关操作。线程的属性主要有:是否分离、是否绑定、优先级、堆栈大小、堆栈位置。默认的属性是非绑定、非分离、1M的堆栈大小与父进程相同的优先级。

互斥锁

pthread_mutex_t 类型为线程互斥锁类型

/* Initialize a mutex.  */
extern int pthread_mutex_init (pthread_mutex_t *__mutex,
                   const pthread_mutexattr_t *__mutexattr)
     __THROW __nonnull ((1));

/* Destroy a mutex.  */
extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
     __THROW __nonnull ((1));

/* Try locking a mutex.  */
extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
     __THROWNL __nonnull ((1));

/* Lock a mutex.  */
extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
     __THROWNL __nonnull ((1));

/* Unlock a mutex.  */
extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
     __THROWNL __nonnull ((1));

也可以声明/设置带有属性的互斥锁,

/* Initialize mutex attribute object ATTR with default attributes
   (kind is PTHREAD_MUTEX_TIMED_NP).  */
extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr);

/* Destroy mutex attribute object ATTR.  */                                                                                                                  
extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr);

/* Set the process-shared flag of the mutex attribute ATTR.  */
extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,int __pshared);

条件变量

extern int pthread_cond_init (pthread_cond_t *__restrict __cond,                                                                                             
                  const pthread_condattr_t *__restrict __cond_attr);
extern int pthread_cond_destroy (pthread_cond_t *__cond);
/* Wake up one thread waiting for condition variable COND.  */
extern int pthread_cond_signal (pthread_cond_t *__cond);

/* Wake up all threads waiting for condition variables COND.  */
extern int pthread_cond_broadcast (pthread_cond_t *__cond);

/* Wait for condition variable COND to be signaled or broadcast.
   MUTEX is assumed to be locked before. */

extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
                  pthread_mutex_t *__restrict __mutex);

/* Wait for condition variable COND to be signaled or broadcast until
   ABSTIME.  MUTEX is assumed to be locked before.  ABSTIME is an
   absolute time specification; zero is the beginning of the epoch
   (00:00:00 GMT, January 1, 1970). */

extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
                   pthread_mutex_t *__restrict __mutex,
                   const struct timespec *__restrict __abstime);

Linux系统下,pthread库提供了一系列用于线程操作的接口,以下是一些常用的线程函数: ### 线程创建 `pthread_create` 用于创建一个新的线程。其函数原型如下: ```c int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); ``` - `thread`:指向 `pthread_t` 类型的指针,用于存储新创建线程的ID。 - `attr`:指向 `pthread_attr_t` 类型的指针,用于指定线程的属性。若为 `NULL`,则使用默认属性。 - `start_routine`:指向线程要执行的函数的指针,该函数接受一个 `void *` 类型的参数,并返回一个 `void *` 类型的值。 - `arg`:传递给 `start_routine` 函数的参数 [^1]。 ### 线程终止 `pthread_exit` 用于终止当前线程。其函数原型如下: ```c void pthread_exit(void *retval); ``` - `retval`:指向线程返回值的指针,该返回值可以被其他线程通过 `pthread_join` 函数获取 [^1]。 ### 线程等待 `pthread_join` 用于等待指定线程终止,并获取其返回值。其函数原型如下: ```c int pthread_join(pthread_t thread, void **retval); ``` - `thread`:要等待的线程的ID。 - `retval`:指向 `void *` 类型的指针,用于存储被等待线程的返回值。若不关心返回值,可将其设置为 `NULL` [^1]。 ### 线程取消 `pthread_cancel` 用于请求取消指定线程。其函数原型如下: ```c int pthread_cancel(pthread_t thread); ``` - `thread`:要取消的线程的ID [^1]。 ### 线程信号发送 `pthread_kill` 用于向指定线程发送信号。其函数原型如下: ```c int pthread_kill(pthread_t thread, int sig); ``` - `thread`:要接收信号的线程的ID。 - `sig`:要发送的信号的编号 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值