1.创建线程
Pthread_create(&tid,NULL,func,NULL);
2.ID线程标识符
Pthread_t tid;
Pthread_equal(tid1,tid2);
pthread_t Pthread_self();
3.线程终止条件
a) Pthread_exit();
b) Return;
c) 其他线程调用pthread_cancel(tid);
4.pthread_cleanup_push(void (*rtn)(void *),void* arg)
Pthread_cleanup_pop(int exec);
执行push条件:
a)pthread_exit();
b)Pthread_cancel();
c)Exec为非零;
5.pthread_create()和pthread_exit()可用于返回结构复杂的指针类型;
6.Pthread_cancel()调用时,线程退出,pthread_join(void ** ret);返回值为PTHREAD_CANCELED;
7.互斥锁
1)初始化
Pthread_mutex_t m_lock = PTHREAD_MUTEX_INITIALIZED;
Pthread_mutex_init(&m_lock);
2)反初始化
Pthread_mutex_destory(&m_lock);
3)上锁
Pthread_mutex_lock(&m_lock);
4)解锁
Pthread_mutex_lock(&m_lock);
8.读写锁(非常适用于数据结构)
1)初始化
Pthread_rwlock_t rwlock;
Pthread_rwlock_init(&rwlock);
2)反初始化
Pthread_rwlock_destory(&rwlock);
3)上锁
Pthread_rwlock_rdlock(&rwlock);(上读锁)
Pthread_rwlock_wrlock(&rwlock);(上写锁)
4)解锁
Pthread_rwlock_unlock(&rwlock);
多个读锁状态下pthread_rwlock_rdlock(&rwlock)返回值为读写锁的个数;
a)多读一写
b)读状态下,加写锁线程阻塞
c)写状态下,加读锁线程阻塞
9.条件变量
锁--->(解锁---->等待------>加锁)---->解锁
a) 初始化
Pthread_cond_t cond = PTHREAD_COND_INITIALIZED;
Pthread_cond_init(&cond);
b) 反初始化
Pthread_cond_destory(&cond);
c) 等待
Pthread_cond_wait(&cond,&mutex);
d) 唤醒
Pthread_cond_signal(&cond);唤醒一个等待变量
Pthread_cond_broadcast(&cond);唤醒所有等待变量
Pthread_mutex_lock(&m_lock)
While(a==1)
{ pthread_cond_wait(&cond,&m_lock); }
Pthread_mutex_unlock(&m_lock);
10.屏障(让任意数量的线程完成后到达屏障后,在进行下一步工作)
a) 初始化
Pthread_barrier_t barrier;
Pthread_barrier_init(&barrier,NULL,count);
b) 反初始化
Pthread_barrier_destory(&barrier);
c) 到达屏障计数
Pthread_barrier_wait(&barrier);(调用此函数成功,count-1);
For(count+1)
{
Phread_create(&tid,NULL,func,NULL);
}
Void *func(void* arg)
{
Pthread_barrier_wait(&barrier);
}