当前位置: 技术问答>linux和unix
求助:linux 下的多线程编程
来源: 互联网 发布时间:2016-07-28
本文导语: 要求写一个程序: 编写一个多线程的应用程序(memtest.c),采用多线程并发的方式进行“并行”运算。该程序要解决的问题是“内存测试”,即测试一段内存是否可靠。这段内存在进程空间内分配,大小不应小于1MB...
要求写一个程序:
编写一个多线程的应用程序(memtest.c),采用多线程并发的方式进行“并行”运算。该程序要解决的问题是“内存测试”,即测试一段内存是否可靠。这段内存在进程空间内分配,大小不应小于1MB。
内存测试算法
对任一被测内存单元,先写入一个数,再从该单元读出,比较写入和读出的数是否相等。如果相等,说明该单元功能正常,否则就不正常。对一个单元,要用如下5种数据测试:
1. 全0,即0
2. 全1,即0xFF
3. 01010101,即0x55
4. 10101010,即0xAA
5. 随机数
主线程就是进程
主线程功能建立后直接拥有的线程。它用命令行方式和用户交互,接受用户的命令,进行相应的工作,打印状态信息。命令包括:
1. times number :设置对每个内存单元进行测试的次数。number即次数。每次测试都要测完全部的5种数据。例如,命令“times 5”表示对每个内存单元,每种数据都要测5次。
2. thread number :设置进行测试工作的线程个数。number即个数。主线程并不算在number内。例如,命令“thread 2”表示同时建立2个工作线程进行并发测试。
3. go:按照设定的参数建立工作线程,开始测试。主线程仍然在命令行等待用户命令。
4. status:打印所有工作线程的工作状态,包括它们的当前进度和测试结果等。
5. abort:停止测试。让所有工作线程都退出。
6. exit:停止测试并退出程序。
工作线程功能
该程序始终只有主线程和用户交互,工作线程即不打印信息,也不读用户的输入。主线程和工作线程之间通过全局变量进行信息传递。工作线程唯一的功能是对主线程分配给它的内存区间进行测试。
PS:
在工作线程中接受用户输入命令式怎么实现呢
编写一个多线程的应用程序(memtest.c),采用多线程并发的方式进行“并行”运算。该程序要解决的问题是“内存测试”,即测试一段内存是否可靠。这段内存在进程空间内分配,大小不应小于1MB。
内存测试算法
对任一被测内存单元,先写入一个数,再从该单元读出,比较写入和读出的数是否相等。如果相等,说明该单元功能正常,否则就不正常。对一个单元,要用如下5种数据测试:
1. 全0,即0
2. 全1,即0xFF
3. 01010101,即0x55
4. 10101010,即0xAA
5. 随机数
主线程就是进程
主线程功能建立后直接拥有的线程。它用命令行方式和用户交互,接受用户的命令,进行相应的工作,打印状态信息。命令包括:
1. times number :设置对每个内存单元进行测试的次数。number即次数。每次测试都要测完全部的5种数据。例如,命令“times 5”表示对每个内存单元,每种数据都要测5次。
2. thread number :设置进行测试工作的线程个数。number即个数。主线程并不算在number内。例如,命令“thread 2”表示同时建立2个工作线程进行并发测试。
3. go:按照设定的参数建立工作线程,开始测试。主线程仍然在命令行等待用户命令。
4. status:打印所有工作线程的工作状态,包括它们的当前进度和测试结果等。
5. abort:停止测试。让所有工作线程都退出。
6. exit:停止测试并退出程序。
工作线程功能
该程序始终只有主线程和用户交互,工作线程即不打印信息,也不读用户的输入。主线程和工作线程之间通过全局变量进行信息传递。工作线程唯一的功能是对主线程分配给它的内存区间进行测试。
PS:
在工作线程中接受用户输入命令式怎么实现呢
|
主线程死循环;用户输入存放在全局变量中;同时设置一个全局flag;如果主进程授收到新的用户输入,就修改flag的值;工作线程死循环,并用条件变量来检查flag的值,如
if(strcmp(flag,"times number")!=0)
pthread_cond_wait(&cond,&lock);
如果flag等于某个命令,就进行相应的操作;主线程在改变flag 的值的时之后,应用pthread_cond_broadcast唤醒所有阻塞的工作线程。
if(strcmp(flag,"times number")!=0)
pthread_cond_wait(&cond,&lock);
如果flag等于某个命令,就进行相应的操作;主线程在改变flag 的值的时之后,应用pthread_cond_broadcast唤醒所有阻塞的工作线程。
|
工作线程功能
该程序始终只有主线程和用户交互,工作线程即不打印信息,也不读用户的输入。主线程和工作线程之间通过全局变量进行信息传递。工作线程唯一的功能是对主线程分配给它的内存区间进行测试。
PS:
在工作线程中接受用户输入命令式怎么实现呢
工作线程可以这样设置,它可以循环工作,每次工作到一段执行点,就读取某段用于与主线程通信的内存,然后去执行对应的指令。
该程序始终只有主线程和用户交互,工作线程即不打印信息,也不读用户的输入。主线程和工作线程之间通过全局变量进行信息传递。工作线程唯一的功能是对主线程分配给它的内存区间进行测试。
PS:
在工作线程中接受用户输入命令式怎么实现呢
工作线程可以这样设置,它可以循环工作,每次工作到一段执行点,就读取某段用于与主线程通信的内存,然后去执行对应的指令。
|
谢谢
是我们操作系统课程的实验
哈哈
===========================
既然楼主这么豪爽,我说一下.
在主线程与两个工作线程之间使用共享内存通信,在它里面用semaphore来锁
住各个条件变量,只有条件满足才释放sem.
是我们操作系统课程的实验
哈哈
===========================
既然楼主这么豪爽,我说一下.
在主线程与两个工作线程之间使用共享内存通信,在它里面用semaphore来锁
住各个条件变量,只有条件满足才释放sem.