谷歌面试题

  有四个线程1、234。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:

A1 2 3 4 1 2....

B2 3 4 1 2 3....

C3 4 1 2 3 4....

D4 1 2 3 4 1....

请设计程序。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>  
#include <string>  
#include <stack>  
#include <windows.h>  
#include <process.h>  
#include <fstream>
using namespace std;  

HANDLE hThread1;
HANDLE hThread2;
HANDLE hThread3;
HANDLE hThread4;

HANDLE hEvent1;
HANDLE hEvent2;
HANDLE hEvent3;
HANDLE hEvent4;

char filepath[256];

UINT __stdcall ThreadWrite1(LPVOID lParam)
{
    ofstream * file = (ofstream *)lParam;
    int n = 10;
    while(n--)
    {
        WaitForSingleObject(hEvent1, INFINITE);
        int i = 1;
        *file<<i;
        ResetEvent(hEvent1);
        SetEvent(hEvent2);
    }
    return 1;
}

UINT __stdcall ThreadWrite2(LPVOID lParam)
{
    ofstream * file = (ofstream *)lParam;
    int n = 10;
    while(n--)
    {
        WaitForSingleObject(hEvent2, INFINITE);
        int i = 2;
        *file<<i;
        ResetEvent(hEvent2);
        SetEvent(hEvent3);
    }
    return 1;
}

UINT __stdcall ThreadWrite3(LPVOID lParam)
{
    ofstream * file = (ofstream *)lParam;
    int n = 10;
    while(n--)
    {
        WaitForSingleObject(hEvent3, INFINITE);
        int i = 3;
        *file<<i;
        ResetEvent(hEvent3);
        SetEvent(hEvent4);
    }
    return 1;
}

UINT __stdcall ThreadWrite4(LPVOID lParam)
{
    ofstream * file = (ofstream *)lParam;
    int n = 10;
    while(n--)
    {
        WaitForSingleObject(hEvent4, INFINITE);
        int i = 4;
        *file<<i;
        ResetEvent(hEvent4);
        SetEvent(hEvent1);
    }
    return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
    ofstream infile;
    //写文件A.txt
    hEvent1 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent3 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent4 = CreateEvent(NULL, TRUE, FALSE, NULL);

    infile.open("A.txt", ios::binary | ios::app);
    SetEvent(hEvent1);
    hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite1, &infile, 0, NULL);
    hThread2 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite2, &infile, 0, NULL);
    hThread3 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite3, &infile, 0, NULL);
    hThread4 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite4, &infile, 0, NULL);
    WaitForSingleObject(hThread1, INFINITE);
    WaitForSingleObject(hThread2, INFINITE);
    WaitForSingleObject(hThread3, INFINITE);
    WaitForSingleObject(hThread4, INFINITE);
    infile.close();
    CloseHandle(hEvent1);
    CloseHandle(hEvent2);
    CloseHandle(hEvent3);
    CloseHandle(hEvent4);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    CloseHandle(hThread3);
    CloseHandle(hThread4);

    //写文件B.txt
    hEvent1 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent3 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent4 = CreateEvent(NULL, TRUE, FALSE, NULL);

    infile.open("B.txt", ios::binary | ios::app);
    SetEvent(hEvent2);
    hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite1, &infile, 0, NULL);
    hThread2 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite2, &infile, 0, NULL);
    hThread3 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite3, &infile, 0, NULL);
    hThread4 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite4, &infile, 0, NULL);
    WaitForSingleObject(hThread1, INFINITE);
    WaitForSingleObject(hThread2, INFINITE);
    WaitForSingleObject(hThread3, INFINITE);
    WaitForSingleObject(hThread4, INFINITE);
    infile.close();
    CloseHandle(hEvent1);
    CloseHandle(hEvent2);
    CloseHandle(hEvent3);
    CloseHandle(hEvent4);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    CloseHandle(hThread3);
    CloseHandle(hThread4);

    //写文件C.txt
    hEvent1 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent3 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent4 = CreateEvent(NULL, TRUE, FALSE, NULL);

    infile.open("C.txt", ios::binary | ios::app);
    SetEvent(hEvent3);
    hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite1, &infile, 0, NULL);
    hThread2 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite2, &infile, 0, NULL);
    hThread3 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite3, &infile, 0, NULL);
    hThread4 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite4, &infile, 0, NULL);
    WaitForSingleObject(hThread1, INFINITE);
    WaitForSingleObject(hThread2, INFINITE);
    WaitForSingleObject(hThread3, INFINITE);
    WaitForSingleObject(hThread4, INFINITE);
    infile.close();
    CloseHandle(hEvent1);
    CloseHandle(hEvent2);
    CloseHandle(hEvent3);
    CloseHandle(hEvent4);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    CloseHandle(hThread3);
    CloseHandle(hThread4);

    //写文件D.txt
    hEvent1 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent3 = CreateEvent(NULL, TRUE, FALSE, NULL);
    hEvent4 = CreateEvent(NULL, TRUE, FALSE, NULL);

    infile.open("D.txt", ios::binary | ios::app);
    SetEvent(hEvent4);
    hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite1, &infile, 0, NULL);
    hThread2 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite2, &infile, 0, NULL);
    hThread3 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite3, &infile, 0, NULL);
    hThread4 = (HANDLE)_beginthreadex(NULL, 0, ThreadWrite4, &infile, 0, NULL);
    WaitForSingleObject(hThread1, INFINITE);
    WaitForSingleObject(hThread2, INFINITE);
    WaitForSingleObject(hThread3, INFINITE);
    WaitForSingleObject(hThread4, INFINITE);
    infile.close();
    CloseHandle(hEvent1);
    CloseHandle(hEvent2);
    CloseHandle(hEvent3);
    CloseHandle(hEvent4);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    CloseHandle(hThread3);
    CloseHandle(hThread4);
    return 0;
}
原文地址:https://www.cnblogs.com/lzmfywz/p/3099811.html