该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在一虚拟机上写《父亲儿子女儿放取水果进程/线程间通信程序设计与实现》,但#include一直报错
代码如下
#include
#include
using namespace std;
HANDLE g_apple = 0;//女儿线程互斥:表示可否取苹果
HANDLE g_orange = 0;//儿子线程互斥:表示可否取桔子
HANDLE g_hMutex = 0; //父亲线程互斥:表示可否向盘中放水果
bool g_continue = true; //控制程序运行和结束
DWORD WINAPI Father(LPVOID); //父亲线程
DWORD WINAPI Son(LPVOID);//儿子线程
DWORD WINAPI Daughter(LPVOID);//女儿线程
int main()
{
//创建各个信号量
g_orange = CreateSemaphore(NULL, 0, 1, NULL);
g_apple = CreateSemaphore(NULL, 0, 1, NULL);
g_hMutex = CreateSemaphore(NULL, 1, 1, NULL);
DWORD threadID[3];
HANDLE hThreads[3];
//创建父亲线程
hThreads[0] = CreateThread(NULL, 0, Father, NULL, 0, &threadID[0]);
if (hThreads == NULL) return -1;
//创建儿子线程
hThreads[1] = CreateThread(NULL, 0, Son, NULL, 0, &threadID[1]);
if (hThreads == NULL) return -1;
//创建女儿线程
hThreads[2] = CreateThread(NULL, 0, Daughter, NULL, 0, &threadID[2]);
if (hThreads == NULL) return -1;
while (g_continue){
if (getchar()){ //按回车后终止程序运行
g_continue = false;
}
}
return 0;
}
//父亲线程
DWORD WINAPI Father(LPVOID lpPara)
{
while (g_continue){
WaitForSingleObject(g_hMutex, INFINITE);
int m = rand() % 2;
if (m == 1) {
std::cerr << "父亲放入一个苹果!" << std::endl;
Sleep(1500);
ReleaseSemaphore(g_apple, 1, NULL);
}
else{
std::cerr << "父亲放入一个桔子!" << std::endl;
Sleep(1500);
ReleaseSemaphore(g_orange, 1, NULL);
}
}
return 0;
}
//女儿线程
DWORD WINAPI Daughter(LPVOID lpPara)
{
while (g_continue){
WaitForSingleObject(g_apple, INFINITE);
std::cerr << "女儿吃到一个苹果!" << std::endl;
Sleep(1500);
ReleaseSemaphore(g_hMutex, 1, NULL);
}
return 0;
}
//儿子线程
DWORD WINAPI Son(LPVOID lpPara)
{
while (g_continue){
WaitForSingleObject(g_orange, INFINITE);
std::cerr << "儿子吃到一个桔子!" << std::endl;
Sleep(1500);
ReleaseSemaphore(g_hMutex, 1, NULL);
}
return 0;
}
这是哪里出了问题?