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