• [APUE]第十一章 线程


    第十一章 线程

    线程也有线程ID用pthread_t 表示

    每个系统对pthread_t 的定义不同。

    int pthread_equal(pthread_t tid1, pthread_ttid2)

    获得线程的线程ID

    pthread_t pthread_self()

    创建线程

    int pthread_create(pthread_t *tid, const pthread_atrr_t*attr, void* (*start_rtn)(void*). void* arg);

    每个线程都有自己的栈空间和errno变量

    线程可以有三种方式退出

    1          线程只是从启动例程返回,返回值是退出码

    2          线程可以被同一个进程的其他线程取消

    3          线程调用phread_exit();

    void pthread_exit(void * reval);
     
    int pthread_join(pthread_t thread, void**reval);

    调用线程将一直阻塞可知道指定的线程返回。

    取消线程

    线程可以调用pthread_cancel(pthread_t tid);

    int pthread_cancel(pthread_t tid);

    线程清理函数

    void pthread_cleanup_push(void(*rtn)(void*), void* arg);
    void pthread_pop(int execute);

    什么时候调用这些清理函数

    1          线程调用pthread_exit

    2          响应取消请求的时候

    3          用非零execute参数调用pthread_cleanup_pop的时候

    使线程分离,这样就不用调用phread_join去获取线程的状态了,让操作系统来回收线程的资源。

    int pthread_detach(pthread_t  tid);

    还可以phread_create的时候对传入的属性,设置为分离状态

    线程同步:

    互斥量

    初始化和destroy

    int pthread_mutex_init(pthread_mutex_t*mutex, const pthread+_mutexattr_t *attr)
    int pthread_mutex_destroy(phtread_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);

    读写锁

    初始化和destroy

    int pthread_rwlock_init(pthread_rwlock_t*rwlock, const pthread_rwlockattr_t * attr);
    int pthread_rwlock_destroy(pthread_rwlock_t*rwlock);

    加锁和解锁

    int pthread_rwlock_rdlock(pthread_rwlock_t*rwlock);
    int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock);
    int pthread_rwlock_unlock(pthread_rwlock_t* rwlock);
    intpthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
    intpthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

    条件变量:

    int pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *attr);
    int pthread_cond_destroy(pthread_cond_t  *cond);
    int pthread_cond_wait(pthread_cond_t *cond, phtread_mutex_t *mutex);
    int pthread_cond_signal(phtread_cond_t*cond)//发送信号
    int pthread_cond_broadcast(pthread_cond_t*cond)


  • 相关阅读:
    51NOD 1371填数字
    51NOD1052 最大M字段和
    ZROI2018提高day4t3
    ZROI2018提高day4t2
    ZROI2018提高day4t1
    ZROI2018普转提day2t4
    ZROI2018普转提day2t2
    ZROI2018普转提day2t1
    ZROI2018普转提day2t3
    ZROI2018提高day3t3
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3087316.html
Copyright © 2020-2023  润新知