题目描述
问题描述:有 4 个线程和 1 个公共的字符数组。线程 1 的功能就是向数组输出 A,线程 2 的功能就是向字符输出 B,线程 3 的功能就是向数组输出 C,线程 4 的功能就是向数组输出 D。要求按顺序向数组赋值 ABCDABCDABCD,ABCD 的个数由线程函数 1 的参数指定。
接口说明:
- void init(); //初始化函数
- void Release(); //资源释放函数
- unsigned int __stdcall ThreadFun1(PVOID pM); //线程函数 1,传入一个 int 类型的指针 [取值范围:1 – 250],用于初始化输出 A 次数
- unsigned int __stdcall ThreadFun2(PVOID pM); //线程函数 2,无参数传入
- unsigned int __stdcall ThreadFun3(PVOID pM); //线程函数 3,无参数传入
- unsigned int __stdcall ThreadFunc4(PVOID pM); //线程函数 4,无参数传入
- char g_write[1032]; //线程 1,2,3,4 按顺序向该数组赋值
实现代码
#include <windows.h>
#include <process.h>
#include "stdio.h"
#include <iostream>
using namespace std;
const int THREAD_NUM = 4;
HANDLE g_ThreadEvent[THREAD_NUM];
HANDLE g_OK;
unsigned int __stdcall Fun(void *pPM);
string g_write;
CRITICAL_SECTION g_cs;
int g_loop = 1;
void StartThread();
int main() {
int innum = 4;
while (cin >> innum) {
g_loop = innum;
StartThread();
g_write.clear();
}
return ;
}
{
(&g_cs);
( i = ; i < THREAD_NUM; i++) {
g_ThreadEvent[i] = (, FALSE, FALSE, );
}
g_OK = (, FALSE, FALSE, );
HANDLE hdl[THREAD_NUM];
( i = ; i < THREAD_NUM; i++) {
hdl[i] = (HANDLE)_beginthreadex(, , Fun, (*)i, , );
}
(g_ThreadEvent[]);
(g_OK, INFINITE);
cout << g_write.() << endl;
( i = ; i < THREAD_NUM; i++) {
(hdl[i]);
(g_ThreadEvent[i]);
}
(&g_cs);
}
{
num = ()pPM;
( i = ; i < g_loop; i++) {
(g_ThreadEvent[num], INFINITE);
(&g_cs);
g_write += num + ;
(&g_cs);
(g_ThreadEvent[(num + ) % THREAD_NUM]);
}
(num + == THREAD_NUM) {
(g_OK);
}
;
}

