其他分享
首页 > 其他分享> > APUE第十一章笔记

APUE第十一章笔记

作者:互联网

第十一章 线程

11.3 线程标识

#include <pthread.h>
int pthread_equal(pthread_t tidl, pthread_t tid2);
//返回值:若相等,返回非0数值;否则,返回0
#include <pthread.h>
pthread_t pthread_self(void) ;
//返回值:调用线程的线程D

11.4 线程创建

#include <pthread.h>
int pthread_create(pthread_t *restrict tidp,
    const pthread_attr_t *restrict attr ,
    void * (*start_rn)(void *) , void *restrict arg);
//返回值:若成功、返回0;否则,返国错误编号

11.5 线程终止

  1. 线程可以简单地从启动例程中返回,返回值是线程的退出码。
  2. 线程可以被同一进程中的其他线程取消。
  3. 线程调用pthread_exit。
#include <pthread.h>
void pthread_exit(void *rval_ptr);
#include <pthread.h>
int pthread_join(pthread_t thread, void **rval_ptr);
//返回值:若成功,返回0;否则,返回错误编号

#include <pthread.h>
int pthread_cancel(pthread_t tid);
//返回值:若成功,返回0;否则,返回错误编号

#include <pthread.h>
void pthread_cleanup_push(void(*rtm)(void*), void* ang);
void pthread_cleanup_pop(int execute);
  1. 调用pthread_exit时
  2. 响应取消请求时
  3. 用非零execute参数调用pthread_cleanup_pop时

#include <pthread.h>
int pthread_detach(pthread_t tid);
//返回值:若成功,返回0;否则,返回错误编号

11.6 线程同步

11.6.1互斥量

#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t*restrict mutex,const pthread_mutexattr_t*restrict attr);
int pthread_mutex_destroy(pthread_mutex_t*mutex);
//两个函数的返回值:若成功,返回0;否则,返回错误编号

#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t*mutex);
int pthread_mutex_trylock(pthread mutex_t*mutex);
int pthread_mutex_unlock(pthread_mutex_t*muter);
//所有函数的返回值:若成功,返回0;否则,返回错误编号

11.6.2 避免死锁

11.6.3 函数pthread_mutex_timedlock

#include <pthread.h>
#include <time.h>
int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);
//返回值:若成功,返回0;否则,返回错误编号

11.6.4 读写锁

#include <pthread.h>
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
//两个函数的返回值:若成功,返回0;否则,返回错误编号
#include <pthread.h>
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
//返回值:若成功,返回0;否则,返回错误编号
#include <pthread.h>
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
//返回值:可以获取锁时,返回0;否则,返回错误EBUSY

11.6.5带有超时的读写锁

#include <pthread.h>
#include <time.h>
int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict rwlock, const struct timespec *restrict tsptr);
int pthread_rwlock_timedwrlock(pthread_rwlock_t *restrict rwlock, const struct timespec *restrict tsptr);
//返回值:若成功,返回0;若超时,返回 ETIMEOUT

11.6.6 条件变量

  1. 等待:一个线程因等待条件为真而处于等待在条件变量上,此时线程不会占用互斥量(等待条件前要锁住互斥量,等待过程中对互斥量
  2. 解锁,等待到函数返回(条件改变或超时)后,互斥量再次被锁住)
    通知:另一个线程在使条件为真时,通知该条件变量的等待线程(在给等待线程发信号时,不需要占有互斥量)
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
int pthread_cond_destroy(pthread_cond_t *cond);
//返回值:若成功,返回0;否则,返回错误编号
#include <pthread.h>
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);
//返回值:若成功,返回0;否则,返回错误编号
#include <pthread.h>
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);
//返回值:若成功,返回0;否则,返回错误编号

11.6.7 自旋锁

#include<pthread.h>
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);
//返回值:若成功,返回0;否则,返回错误编号
#include <pthread.h>
int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);
//返回值:若成功,返回0;否则,返回错误编号

11.6.8 屏障

#include <pthread.h>
int pthread_barrier_init(pthread_barrier *restrict barrier, const pthread_barrierattr_t *restrict attr, unsigned int count);
int pthread_barrier_destroy(pthread_barrier *barrier);
//返回值:若成功,返回0;否则,返回错误编号
#include <pthread.h>
int pthread_barrier_wait(pthread_barrier_t *barrier);
//返回值:若成功,返回 0 或者 PTHREAD_BARRIER_SERIAL_THREAD;否则,返回错误编号

标签:返回,rwlock,APUE,int,第十一章,笔记,线程,pthread,mutex
来源: https://blog.csdn.net/u013162449/article/details/122584783