欢迎访问我的个人博客:Talk is cheap. Show me the code!。我相信会有所收获的。
实验二 多线程程序实验
一、实验目的
1. 进一步理解线程
2. 学习使用pthread线程库
二、实验运行环境
虚拟机VMware下的Ubuntu16.04系统
三、实验内容
1. 用线程生成Fibonacci数列
2. 多线程矩阵乘法
四、实验原理
线程使用说明——主要系统调用:
pthread_create():创建线程
pthread_join():阻塞调用线程,直到threadid所指定的线程终止
每个线程只能用pthread_join()一次。若多次调用就会发生逻辑错误。
pthread_exit():终止调用线程
pthread_attr_init():初始化线程属性为默认属性
pthread_attr_getscope():获得线程竞争范围
pthread_attr_setscope():设置线程竞争范围
使用pthread的程序编译命令:
若程序文件是main.c
传统命令为:gcc main.c -o main -lpthread
现在命令为:gcc main.c -o main -pthread
差别:后一个会选用线程安全的库实现
若程序文件是main.cc
传统命令为:g++ main.cc -o main -lpthread
现在命令为:g++ main.cc -o main -pthread
差别:后一个会选用线程安全的库实现
五、实验过程
1. 用线程生成Fibonacci数列
用pthread线程库,按照第四章习题4.11的要求生成并输出Fibonacci数列。
代码如下:
#include <iostream>
#include <pthread.h>
using namespace std;
int n;// the size of fibonacci array
void *fibonacci(void *data) {
int *a = (int*)data;
// calculate the fibonacci array
for (int i = 2; i < n; i++) {
a[i] = a[i - 1] + a[i - 2];
}
pthread_exit(NULL);
}
int main() {
cout <<