Linux下多线程编程之互斥锁、条件变量、信号量

一、进程建立函数

 int pthread_create (pthread_t * thread_id, __const pthread_attr_t * __attr, void *(*__start_routine) (void *), void *__restrict __arg);post

第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。spa

一个实例:线程

void *producer(void *args);指针

pthread_t tha;rest

pthread_create(&tha,NULL,producer,NULL);进程

pthread_join(tha,NULL);同步

二、互斥锁it

经过锁机制实现线程间的同步。同一时刻只容许一个线程执行一个关键部分的代码。class

int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);

一个实例:

pthread_mutex_t lock;

pthread_mutex_init(&lock,NULL);

pthread_mutex_lock(&lock);

临界区

pthread_mutex_unlock(&lock);

三、条件变量

利用线程间共享的全局变量进行同步的一种机制,一般与互斥锁一块儿使用。

int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex); //该函数要在mutex的锁定区域内使用

int pthread_cond_signal(pthread_cond_t *cond);

一个实例:

pthread_cond_t notfull;

pthread_mutex_lock(&lock);

pthread_cond_wait(&notfull,&lock);

pthread_mutex_unlock(&lock);

四、信号量

#include <semaphore.h>
int sem_init(sem_t *sem , int pshared, unsigned int value);

int sem_wait(sem_t *sem); //给信号量减1,对一个值为0的信号量调用sem_wait,这个函数将会等待直到有其它线程使它再也不是0为止。
int sem_post(sem_t *sem); //给信号量的值加1

int sem_destroy(sem_t *sem);

一个实例:

sem_t empty;

sem_t occupied;  //这两个变量是全局变量

sem_wait(&empty);

...

sem_post(&occupied);

相关文章
相关标签/搜索