zoukankan      html  css  js  c++  java
  • 谷歌面试题

      有四个线程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;
    }
  • 相关阅读:
    判断DataReader中是否有指定列
    datatable dateset 载体传递数据、存储过程
    抓取网页信息
    捕获异常 winform
    修改myeclipse的jsp模板
    包装设计模式的实现以改进BufferedReader中的readLine方法为例
    查询图书馆借书情况-代码
    查询四六级成绩
    Sqlyog增加试用期
    MVC笔记-模板页布局
  • 原文地址:https://www.cnblogs.com/lzmfywz/p/3099811.html
Copyright © 2011-2022 走看看