线程间机制(同步和互斥)

来源:互联网 发布:开淘宝店好做吗 编辑:程序博客网 时间:2024/06/07 13:16
线程间机制{多线程共享同一个进程子地址空间优点: 线程间很容易进行通信1、 通过全局变量实现数据共享和交换缺点:多个线程同时访问共享对象时需要引入同步和互斥机制}线程的同步和互斥{同步{同步:指的是多任务(线程)按照约定的顺序相互配合完成一件事情同步机制基于信号量提出,信号量来决定线程是继续运行还是阻塞等待P---V操作信号量是一种受保护的变量(信号量的值是非负整数){初始化P操作(申请资源)// 信号量 - 1V操作(释放资源)// 信号量 + 1}}互斥{互斥:保证共享数据资源操作的完整性}}信号量操作(同步){#include<semaphore.h>int sem_init(sem_t *sem, int pshared, unsigned int value); //初始化sem: 初始化的信号量pshared:信号量共享的范围(0:线程间使用, 非0: 进程间使用)value: 信号量初值返回值:成功: 0出错:-1int sem_wait(sem_t *sem); // P操作(申请资源)sem:信号量返回值:成功: 0出错:-1int sem_post(sem_t *sem); // V操作(释放资源)sem: 信号量返回值:成功: 0出错:-1}线程间互斥{互斥锁主要是用来保护临界资源(任何时候最多只能有一个线程能访问该资源)#include<phtread.h>int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr); // 初始化互斥锁mutex: 互斥锁attr:互斥锁属性 // NULL表示缺省属性返回值:成功: 0出错:返回错误号int pthread_mutex_lock(pthread_mutex_t *mutex); // 申请互斥锁mutex:互斥锁返回值:成功: 0出错:-1int pthread_mutex_unlock(pthread_mutex_t *mutex); // 释放互斥锁mutex:互斥锁返回值:成功: 0出错:返回错误号}