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;
    }
  • 相关阅读:
    oracle归档空间不足的问题(rman删除归档日志)
    oracle DG查看延时时间
    Convert JS object to JSON string
    转:微信公众平台开发(80) 上传下载多媒体文件
    生成带参数的二维码
    关闭微信浏览器可以使用
    微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏
    如何隐藏微信公众平台右上角按钮
    微信公众平台服务号、订阅号的相关说明选择字号:
    微信公众平台群发消息的方法及注意事项
  • 原文地址:https://www.cnblogs.com/lzmfywz/p/3099811.html
Copyright © 2011-2022 走看看