C语言 多线程编程(UNIX)

一、相关函数
函数描述
int pthread_equal(pthread_t tidl, pthread_t tid2);位于:<pthread.h>;
功能:比较两个线程是否是同一个线程;
返回:相等返回非0数值, 否则返回0。
pthread_t pthread_self();位于:<pthread.h>;
功能:获取调用线程的线程ID。
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void (*start_routine)(void *),void *arg);位于:<pthread.h>;
功能:创建一个新的线程实例;
参数说明:
thread: 是一个指针,线程创建成功时,用以返回创建的线程ID
attr:指定线程属性,NULL表示使用默认属性1
start_routine:函数指针,指向线程创建后要调用的函数。这个被线程调用的
函数也称为线程函数
arg:该参数指向传递给线程函数的参数

返回:成功返回0,出错返回错误编号。
void pthread_exit(void *rval_ptr);位于:<pthread.h>;
功能:终止指定线程;
参数说明:
rval_ptr:函数的返回代码,只要pthread_join中的第二个参数
**rval_ptr不是NULL,这个值将被传递给 **rval_ptr
int pthread_join(pthread_t thread, void **rval_ptr);位于:<pthread.h>;
功能:用来等待一个线程的结束;
参数说明:
thread:被等待的线程标识符
rval_ptr:一个用户定义的指针,它可以用来存储被等待线程的返回值。

返回:成功返回0,出错返回错误编码。
int pthread_cancel(pthread_t tid);位于:<pthread.h>;
功能:取消同一进程中的其他线程;
返回:成功返回0,出错返回错误编码。
int pthread_cleanup_push(void (*rtn)(void *), void *arg);位于:<pthread.h>;
功能:创建一个线程退出时的清理函数。
int pthread_cleanup_pop(int execute);位于:<pthread.h>;
功能:触发清理函数,按照pthread_cleanup_push中相反的顺序进行。如果execute为0则对应的清理函数不会执行。
int pthread_detach(pthread_t tid);位于:<pthread.h>;
功能:分离线程;
返回:成功返回0,出错返回错误编码。
1.1 示列
#include <stdio.h>
#include <pthread.h>

void *new_thread(void *arr){
    int *i = (int *)arr;

    printf("xxxx %d", *i);
}

int main() {

    pthread_t tid = pthread_self();

    pthread_t currentTid;
    int i = 100;
    pthread_create(&currentTid, NULL, new_thread, &i);


    printf("tid: %ld\n", tid);
    return 0;
}

二、线程与进程之间的相似函数
进程函数线程函数描述
forkpthread_create创建新的控制流
exitpthread_exit从现有的控制流中退出
waitpidpthread_join从控制流中得到退出状态
atexitpthread_cancel_push注册在退出控制流时调用的函数
getpidpthread_self获取控制流的ID
abortpthread_cancel请求控制流的非正常退出
三、线程同步
3.1 互斥锁

互斥锁要么是锁住状态,要么是不叫锁状态。

函数描述
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_t *attr);位于:<pthread.h>;
功能:初始化一个互斥锁;
返回:成功返回0,出错返回-1。
int pthread_mutex_destroy(pthread_mutex_t *mutex);位于:<pthread.h>;
功能:注销一个互斥锁;
返回:成功返回0,出错返回-1。
int pthread_mutex_lock(pthread_mutex_t *mutex);位于:<pthread.h>;
功能:加锁;
返回:成功返回0,出错返回错误编码。
int pthread_mutex_trylock(pthread_mutex_t *mutex);位于:<pthread.h>;
功能:尝试获取锁;
返回:成功返回0,出错返回错误编码。
int pthread_mutex_unlock(pthread_mutex_t *mutex);位于:<pthread.h>;
功能:释放锁;
返回:成功返回0,出错返回错误编码。
int pthread_mutex_timelock(pthread_mutex_t *mutex, const struct timespec *tsptr);位于:<pthread.h>;
功能:设置允许绑定线程阻塞时间;
返回:成功返回0,出错返回-1。
3.2 读写锁

读写锁有三种状态:读模式下加锁状态写模式下加锁状态不加锁状态
一次只有一个线程可以占有写模式的读写锁,但是对个线程可以同时占有读模式的读写锁。

函数描述
int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlock_t *attr);位于:<pthread.h>;
功能:初始化一个读写锁;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);位于:<pthread.h>;
功能:销毁一个读写锁;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);位于:<pthread.h>;
功能:获取一个读模式下的锁;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);位于:<pthread.h>;
功能:获得一个写模式下的锁;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);位于:<pthread.h>;
功能:释放一个读写锁;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);位于:<pthread.h>;
功能:尝试获取一个读模式下的锁;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);位于:<pthread.h>;
功能:尝试获取一个写模式下的锁;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock, const struct timespec *tsptr);位于:<pthread.h>;
功能:获取读锁时最大等待时间;
返回:成功返回0,出错返回错误编码。
int pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *tsptr);位于:<pthread.h>;
功能:获取写锁时最大等待时间;
返回:成功返回0,出错返回错误编码。
3.3 条件变量
函数描述
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);位于:<pthread.h>;
功能:初始化一个条件变量;
返回:成功返回0,出错返回错误编码。
int pthread_cond_destroy(pthread_cond_t *cond);位于:<pthread.h>;
功能:销毁一个条件变量;
返回:成功返回0,出错返回错误编码。
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);位于:<pthread.h>;
功能:等待条件变为真;
返回:成功返回0,出错返回错误编码。
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *tsptr);位于:<pthread.h>;
功能:在指定的时间内等待条件为真;
返回:成功返回0,出错返回错误编码。
int pthread_cond_signal(pthread_cond_t *cond);位于:<pthread.h>;
功能:唤醒一个等待改条件的线程;
返回:成功返回0,出错返回错误编码。
int pthread_cond_broadcast(pthread_cond_t *cond);位于:<pthread.h>;
功能:唤醒所有等待改条件的线程;
返回:成功返回0,出错返回错误编码。
3.4 自旋锁
函数描述
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);位于:<pthread.h>;
功能:初始化一个自旋锁;
返回:成功返回0,出错返回错误编码。
int pthread_spin_destroy(pthread_spinlock_t *lock);位于:<pthread.h>;
功能:销毁一个自旋锁;
返回:成功返回0,出错返回错误编码。
int pthread_spin_lock(pthread_spinlock_t *lock);位于:<pthread.h>;
功能:获取一个自旋锁;
返回:成功返回0,出错返回错误编码。
int pthread_spin_trylock(pthread_spinlock_t *lock);位于:<pthread.h>;
功能:尝试获取一个自旋锁;
返回:成功返回0,出错返回错误编码。
int pthread_spin_unlock(pthread_spinlock_t *lock);位于:<pthread.h>;
功能:释放一个自旋锁;
返回:成功返回0,出错返回错误编码。
3.5 屏障
函数描述
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count);位于:<pthread.h>;
功能:初始化一个屏障;
返回:成功返回0,出错返回错误编码。
int pthread_barrier_destroy(pthread_barrier_t *barrier);位于:<pthread.h>;
功能:销毁一个屏障;
返回:成功返回0,出错返回错误编码。
int pthread_barrier_wait(pthread_barrier_t *barrier);位于:<pthread.h>;
功能:把先后到达的多个线程挡在同一屏障前,直到所有线程到齐;
返回:成功返回0或者PTHREAD_BARRIER_SERIAL_THREAD,出错返回错误编码。
四、线程属性
函数描述
int pthread_attr_init(pthread_attr_t *attr);位于:<pthread.h>;
功能:初始化化属性值;
返回:成功返回0,出错返回错误编码。
int pthread_attr_destroy(pthread_attr_t *attr);位于:<pthread.h>;
功能:销毁属性;
返回:成功返回0,出错返回错误编码。
int pthread_attr_getdetachstate(const pthread_attr_t attr, int detachstate);位于:<pthread.h>;
功能:获取detachstate线程属性;
返回:成功返回0,出错返回错误编码。
int pthread_attr_setdetachstate(pthread_attr_t attr, int detachstate);位于:<pthread.h>;
功能:设置线程属性detachstate设置为以下两个合法值之一:PTHREAD_CREATE_DETACHED,以分离状态启动线程;或者 PTHREAD_CREATE_JOINABLE,正常启动线程,应用程序可以获取线程的终止状态;
返回:成功返回0,出错返回错误编码。
int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize);位于:<pthread.h>;
功能:获取线程的栈大小 和起始地址;
返回:成功返回0,出错返回错误编码。
int pthread_attr_setstack(pthread_attr_t attr, void *stackaddr, size_t stacksize);位于:<pthread.h>;
功能:设定线程栈的地址和大小;
返回:成功返回0,出错返回错误编码。
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t *stacksize);位于:<pthread.h>;
功能:设置线程栈属性 stacksize;
返回:成功返回0,出错返回错误编码。
int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);位于:<pthread.h>;
功能:获取线程栈属性 stacksize;
返回:成功返回0,出错返回错误编码。
int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize);位于:<pthread.h>;
功能:获取线程的栈保护区大小;
返回:成功返回0,出错返回错误编码。
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);位于:<pthread.h>;
功能:设置线程的栈保护区大小;
返回:成功返回0,出错返回错误编码。

五、同步属性
函数描述
int pthread_mutexattr_init(pthread_mutexattr_t *attr);位于:<pthread.h>;
功能:初始化互斥量属性;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);位于:<pthread.h>;
功能:销毁互斥量属性;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, int *pshared);位于:<pthread.h>;
功能:;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, int *pshared);位于:<pthread.h>;
功能:获取进程共享属性;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);位于:<pthread.h>;
功能:设置进程共享属性;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_getrobust(const pthread_mutexattr_t *attr, int robust);位于:<pthread.h>;
功能:获取健壮的互斥量属性值;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_setrobust(pthread_mutexattr_t *attr, int robust);位于:<pthread.h>;
功能:设置健壮的互斥量属性值;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_consistent(pthread_mutexattr_t *mutex);位于:<pthread.h>;
功能:指名该互斥量相关的状态在互斥量解锁之前是一致的;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type);位于:<pthread.h>;
功能:获取互斥量类型属性;
返回:成功返回0,出错返回错误编码。
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);位于:<pthread.h>;
功能:设置互斥量类型属性;
返回:成功返回0,出错返回错误编码。
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);位于:<pthread.h>;
功能:初始化pthread_rwlockattr_t 结构;
返回:成功返回0,出错返回错误编码。
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);位于:<pthread.h>;
功能:销毁pthread_rwlockattr_t 结构;
返回:成功返回0,出错返回错误编码。
int pthread_rwlockattr_getpshared(cpnst pthread_rwlockattr_t *attr, int *pshared);位于:<pthread.h>;
功能:获取读写锁的进程共享属性;
返回:成功返回0,出错返回错误编码。
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared);位于:<pthread.h>;
功能:设置读写锁的进程共享属性;
返回:成功返回0,出错返回错误编码。
int pthread_condattr_init(pthread_condattr_t *attr);位于:<pthread.h>;
功能:;
返回:成功返回0,出错返回错误编码。
int pthread_condattr_destroy(pthread_condattr_t *attr);位于:<pthread.h>;
功能:销毁条件变量函数;
返回:成功返回0,出错返回错误编码。
int pthread_condattr_getpahared(const pthread_condattr_t *attr, int *pshared);位于:<pthread.h>;
功能:获取进程共享属性;
返回:成功返回0,出错返回错误编码。
int pthread_condattr_setpahared(pthread_condattr_t *attr, int pshared);位于:<pthread.h>;
功能:设置进程共享属性;
返回:成功返回0,出错返回错误编码。
int pthread_condattr_getclock(const pthread_condattr_t *attr, clockid_t *clock_id);位于:<pthread.h>;
功能:获取可被用于pthread_cond_timewait函数的时钟ID;
返回:成功返回0,出错返回错误编码。
int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id);位于:<pthread.h>;
功能:设置可被用于pthread_cond_timewait函数的时钟ID;
返回:成功返回0,出错返回错误编码。
int pthread_barrierattr_init(pthread_barrierattr_t *attr);位于:<pthread.h>;
功能:初始化屏障属性对象;
返回:成功返回0,出错返回错误编码。
int pthread_barrierattr_destroy(pthread_barrierattr_t *attr);位于:<pthread.h>;
功能:销毁屏障性属性对象;
返回:成功返回0,出错返回错误编码。
int pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, int *pshared);位于:<pthread.h>;
功能:获取进程共享属性值;
返回:成功返回0,出错返回错误编码。
int pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared);位于:<pthread.h>;
功能:设置进程共享属性值;
返回:成功返回0,出错返回错误编码。

  1. ↩︎
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值