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;
    }
  • 相关阅读:
    plsql developer中各个window的作用【转】
    回忆java输入输出流,走出误区
    JDBC中的元数据
    对于Oracle、mysql和sql server中的部分不同理解
    我对数据库事务的理解(MYSQL中)
    关于mysql的备份和恢复
    mysql触发器学习
    mysql存储过程学习
    JavaScript位运算符
    【JavaScript】数组随机排序 之 Fisher–Yates 洗牌算法
  • 原文地址:https://www.cnblogs.com/lzmfywz/p/3099811.html
Copyright © 2011-2022 走看看