1. int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg);
  2. 自由主题
    1. #include <pthread.h>
    2. int pthread_mutex_destroy(pthread_mutex_t *mutex);销毁
    3. int pthread_mutex_init(pthread_mutex_t *restrict mutex,
    4. const pthread_mutexattr_t *restrict attr);指定属性的初始化
    5. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZ
  3. 自由主题
    1. #include <pthread.h>
    2. int pthread_cond_destroy(pthread_cond_t *cond);
    3. int pthread_cond_init(pthread_cond_t *restrict cond,
    4. const pthread_condattr_t *restrict attr);
    5. pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
  4. 线程id
    1. 进程id创建后保存再phread_t指向的任何类型的文件中,不能简单printf打印,也可以用pthread_self(3)可以获得当前线程的id。
      1. 主线程调用return和支线程调用exit都会使整个进程退出
  5. 进程操作
    1. 退出
      1. 不同退出value值不同
      2. int pthread_join(pthread_t thread, void **value_ptr);
        1. 挂起等待,直到thread退出才退出,获取终止状态
        2. 同一线程调用两次pthread_join,他会被设为Detach状态,回收所有资源
      3. PTHREAD_CANCELED的值是-1
      4. void pthread_exit(void *value_ptr);退出状态传给value,主线程调用,进程也不会退出。
        1. value必须是Malloc分配的,不然推出后这个也会自动消失
  6. Condition Variable
    1. 等待某个条件成立才执行,不成立则阻塞,又别的程序改变条件才执行。
      1. 信号量
        1. 改良版,sem_init时,资源量减一,vaLUE为0则挂起等待资源
  7. 调度优先级
    1. 线程同步
      1. 不同线程访问同一个共享资源发生冲突,因此要引入进程锁
        1. 等待队列,将其余线程挂起,如果对一个进程使用2个lock会造成死锁(要等待pthread_mutex_trylock,可以防止死锁,不挂起。要用多个锁,记得按先后顺序。