linux线程,互斥量,读写锁,条件变量和屏障

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);

}

猜你喜欢

转载自blog.csdn.net/qq_14814909/article/details/76206986