线程操作
声明:这部分的内容主要来源于Linux C程序设计大全 清华大学出版社
首先了解一下几个概念:
临界区:进程中访问临街资源的代码成为临界区,临界区内一般放的是1个以上的进程或者线程公用的数据
临界资源:临界资源是指每次只允许一个进程访问的资源。常见的临界资源有:硬件:打印机,磁带机 软件:消息缓冲队列、变量、数组缓冲区
Linux环境下使用pthread_mutex_t表示互斥量。Linux使用pthread_mutex_init()对互斥量进行初始化。其函数原型是:
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
pthread_mutexattr_init()函数成功完成之后会返回零,其他任何返回值都表示出现了错误
函数成功执行后,互斥锁被初始化为未锁住态。
得到和释放互斥量
互斥量对于用户来说是透明的数据结构,用户不能直接对其进行操作,应该使用系统提供的操作函数:
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
前两个函数是用来得到一个互斥量的锁,第三个函数是用来解锁的,第一个和第二个区别是和第一个不同的是第二个在得不到互斥量的锁的时候并不会导致线程阻塞,而是立即返回一个EBUSY值表示申请的锁处于繁忙状态。
这几个函数都是当返回0的时候表示的是成功加锁或者解锁