Linux下多线程编程之互斥锁、条件变量、信号量
2014-09-05 15:52
288 查看
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);
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 多线程编程 之 信号量互斥同步
- linux 多线程编程 之 信号量互斥同步
- linux多线程编程--信号量和条件变量 唤醒丢失事件
- Linux高级编程复习 第十二章 多线程概念_互斥锁--_多线程同步_信号_条件量_信号量
- linux 多线程编程 之 信号量互斥同步
- linux 多线程编程 之 信号量互斥同步
- 对于多线程编程的互斥锁和条件变量以及信号量的理解
- Linux操作系统下的多线程编程详细解析----条件变量
- Linux--Linux互斥锁、条件变量和信号量
- linux程序设计 线程 多线程编程 信号量
- <转>linux操作系统编程——共享内存读写(采用信号量进行同步互斥)
- linux基础编程 多线程中的互斥锁 pthread_mutex_lock
- linux 多线程编程 互斥锁与条件变量
- 线程同步(信号量,互斥,条件变量) 分类: linux应用程序 2008-04-08 09:43 2587人阅读 评论(1) 收藏 举报 进行多线程编程,最头疼的就是那些共享的数据。因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法
- Linux C 多线程编程 互斥锁与条件变量
- <转>linux操作系统编程——共享内存读写(采用信号量进行同步互斥)
- linux基础编程 多线程中的互斥锁 pthread_mutex_lock
- linux 多线程编程 同步与互斥
- Linux--Linux互斥锁、条件变量和信号量
- Linux--Linux互斥锁、条件变量和信号量