首页 > 代码库 > Linux下多线程编程之互斥锁、条件变量、信号量
Linux下多线程编程之互斥锁、条件变量、信号量
1、进程创建
int pthread_create (pthread_t * thread_id, __const pthread_attr_t * __attr, void *(*__start_routine) (void *), void *__restrict __arg);
第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。
一个实例:
void *producer(void *args);
pthread_t tha;
pthread_create(&tha,NULL,producer,NULL);
pthread_join(tha,NULL);
2、互斥锁
通过锁机制实现线程间的同步。同一时刻只允许一个线程执行一个关键部分的代码。
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);
3、条件变量
利用线程间共享的全局变量进行同步的一种机制,通常与互斥锁一起使用。
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(¬full,&lock);
pthread_mutex_unlock(&lock);
4、信号量
#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);
Linux下多线程编程之互斥锁、条件变量、信号量