一、课程内容第三章学习
1、并行计算
是一种计算方案,它尝试使用多个执行并行算法的处理器更快速的解决问题
顺序算法与并行算法
并行性与并发性
并行算法只识别可并行执行的任务。CPU系统中,并发性是通过多任务处理来实现的
2、线程
线程的原理:某进程同一地址空间上的独立执行单元
线程的优点
线程创建和切换速度更快
线程的响应速度更快
线程更适合并行运算
线程的缺点
线程需要来自用户的明确同步
库函数不安全
单CPU系统中,线程解决问题实际上要比使用顺序程序慢
3、线程操作
线程可在内核模式或用户模式下执行
其中涉及Linux下的pthread并发编程
线程管理函数
创建线程
pthread_create()
int pthread_create(pthread_t *pthread_id,pthread_attr_t *attr,void *(*func)(void*),void *arg)
其中:
1、pthread_id是指向pthread_t类型变量的指针
2、attr如果是NULL,将使用默认属性创建线程
线程ID
int pthread_equal(pthread_t t1,pthread_t t2);
不同的线程,返回0,否则返回非0
线程终止
int pthread_exit(void *status);
线程连接
int pthread_join(pthread_t thread,void **status_ptr)
线程同步
竞态条件:修改结果取决于线程执行顺序
互斥量
在pthread中,锁被称为互斥量
pthread_mutex_lock(&m);
access shared data object;
pthread_mutex_unlock(&m);
死锁预防
死锁是一个状态,在这种状态下,许多执行实体相互等待,无法继续进行下去
条件变量
条件变量可以通过两种方法进行初始化:静态方法,动态方法
生产者-消费者问题
共享全局变量
int buf[NBUF];
int head,tail;
int data;
4.信号量
信号量是进程同步的一般机制
信号量和条件变量
屏障
线程连接操作允许某线程等待其他线程终止
在pthread中可以采用的机制是屏障以及一系列屏障函数
Linux中的线程
进程和线程都是由clone()系统调用创建的具有以下原型
int clone(int (*fn)(void*),void *child_stack,int flags,void *arg)
信号量与条件变量的区别:
条件变量、互斥锁——主要用于线程间通信
pthread_cond_wait()
pthread_cond_wait(&m_cond,&m_mutex); 指的是等待条件变量,总和一个互斥锁结合使用。
pthread_cond_wait() 函数执行时先自动释放指定的互斥锁,然后等待条件变量的变化;在函数调用返回之前(即wait成功获得cond条件的时候),会自动将指定的互斥量重新锁住(即在“等待的条件变量满足条件时,会重新锁住指定的锁”)。
二、代码实践
编译项目:
1、利用man和ls指令进行查询
2、等待和退出系统调用代码实践
代码
分析代码:
三、苏格拉底问答