Linux应用编程基础--(8)线程间的同步和互斥

来源:互联网 发布:创意美工作品图片大全 编辑:程序博客网 时间:2024/06/11 05:41
前提引入:


多进程 共享同一个进程的地址空间,优点是进程间容易通信,即通过全局变量即可完成多线程见的通信。但是缺点是 当多线程同时访问共享对象时,需要引入同步和互斥机制。
一、线程间互斥
1,互斥机制的概念:
通过互斥锁来保证共享数据操作的完整性,互斥锁只有两种状态:上锁和解锁。具有唯一性和排他性,对文件来说访问者无序。也可把互斥锁看做是某种意义上的全局变量,同一时刻只能有一个线程持有某个互斥锁,拥有互斥锁的线程能够对临界资源进行操作。
2,互斥锁机制的基本函数:
头文件:
#include<pthread.h>
函数原型:
int pthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); 锁初始化
int pthread_mutex_destroy (pthread_mutex_t *mutex); 删除互斥锁
int pthread_mutex_trylock (pthread_mutex_t *mutex); 加锁,若不成功返回
int pthread_mutex_lock (pthread_mutex_t *mutex); 加锁,若不成功阻塞
int pthread_mutex_unlock (pthread_mutex_t *mutex); 解锁
函数参数含义:
mutex:互斥锁
Munteattr :互斥锁属性 NULL表示缺省
函数返回值: 成功 0出错-1

二、进程间同步
1,进程间同步概念:
由多个线程安照约定的顺序来完成同一件事情,由信号量来决定线程的继续运行还是阻塞,信号量也就是操作系统中用到的PV操作。
信号量控制线程:
信号量表示一类资源,其值表示系统中该资源的数量
信号量是一种受保护的变量:只允许三种操作:
初始化、P操作、V操作
信号量值为一个非负整数。


2,信号量操作函数:
信号量的数据类型为结构sem_t,它本质上是一个长整型的数
头文件:
#include<semaphore.h>
函数原型:
int sem_init (sem_t *sem, int pshared, unsigned int value);初始化
int sem_wait(sem_t * sem);P操作
int sem_post(sem_t * sem);V操作
int sem_getvalue(semt_t * sem); 取信号量的值
传参含义:
sem 信号量 value 初始值 pshared 共享范围(0:线程间使用 非0:进程间使用)

阅读全文
0 0
原创粉丝点击