题目

有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推………现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:A:1 2 3 4 1 2….B:2 3 4 1 2 3….C:3 4 1 2 3 4….D:4 1 2 3 4 1….请设计程序。

代码

#include <stdio.h>
#include <process.h>
#include <windows.h>
#include <fstream.h>
#include <string.h>unsigned int __stdcall Fun(void *pPM);  //线程个数
const int THREAD_NUM = 4;
const int FILE_NUM = 4;ofstream ofile[FILE_NUM];//某个线程的下一个要写的文件
int FILE_THREAD[FILE_NUM]={0,1,2,3};
int NEXT_LOOP[FILE_NUM]={0,1,2,3,};CRITICAL_SECTION g_csFile;//循环次数
const int LOOP = 6;//互斥事件
HANDLE g_hThreadEvent[THREAD_NUM];int main()
{printf("\t有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2\n");printf("以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式\n");int i = 0 , j;HANDLE hdl[THREAD_NUM];InitializeCriticalSection(&g_csFile);//事件开启的时候是没有触发的for (i = 0; i < THREAD_NUM; i++) g_hThreadEvent[i] = CreateEvent(NULL,FALSE,FALSE,NULL);//将线程编号作为线程参数传进去,先转换为指针,再转换为整形,char FILE_THREAD[] ="A.txt";for (i = 0; i < FILE_NUM; i++) {FILE_THREAD[0] = i + 'A';ofile[i].open(FILE_THREAD,ios::trunc);if(ofile[i].fail()){printf("打开文件%s 失败",FILE_THREAD);continue;}}for (i = 0; i < THREAD_NUM; i++) hdl[i] = (HANDLE)_beginthreadex(NULL,0,Fun,(void*)i,0,NULL);//触发第一个线程,线程函数会按顺序自己触发下一个要执行的线程SetEvent( g_hThreadEvent[0] );WaitForMultipleObjects(THREAD_NUM,hdl,TRUE,INFINITE);//清理for (i = 0; i < THREAD_NUM; i++){CloseHandle(hdl[i]);CloseHandle(g_hThreadEvent[i]);}for( i  = 0 ; i< FILE_NUM;i++){ofile[i].close();}DeleteCriticalSection(&g_csFile);return 0;
}unsigned int __stdcall Fun(void *pPM)
{int num = (int)pPM ;int i = 0;for( i  = 0 ; i< LOOP;i++){//等待顺序触发WaitForSingleObject(g_hThreadEvent[num],INFINITE);      EnterCriticalSection(&g_csFile);printf("  线程 %d 正在向%c文件写入,下一次对文件%c操作的是线程%d\n",num + 1 , FILE_THREAD[num] + 'A',FILE_THREAD[num] + 'A',(num+1)%(THREAD_NUM) +1);ofile[FILE_THREAD[num]]<<num+1<<" ";Sleep(200);//记录下一轮对应序号要操作的文件, (num+1)%(FILE_NUM) 事件对应的线程,操作文件FILE_THREAD[num]NEXT_LOOP[ (num+1)%(FILE_NUM) ] = FILE_THREAD[num] ;if( num + 1 == FILE_NUM){printf("\n");//本轮写入结束,将计算好的下一轮文件操作顺序取过来memcpy(&FILE_THREAD,&NEXT_LOOP,FILE_NUM *sizeof(int));}LeaveCriticalSection(&g_csFile);     //触发下一个线程,1触发2 ,2触发3,3触发4,4触发1SetEvent(g_hThreadEvent[(num+1)%THREAD_NUM ]);}return 0;
}


原创地址(谢谢博主的无私分享):
http://blog.csdn.net/lilien1010/article/details/8119325

Google面试题—有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD【转载】相关推荐

  1. 【Google面试题】有四个线程1、2、3、4同步写入数据…C++11实现

    Google面试题 有四个线程1.2.3.4.线程1的功能就是输出1,线程2的功能就是输出2,以此类推-现在有四个文件ABCD.初始都为空.现要让四个文件呈如下格式: A:1 2 3 4 1 2- B ...

  2. Google面试题—有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD...

    分类: windows编程 C++ 2012-10-27 19:56 3410人阅读 评论(1) 收藏 举报 有四个线程1.2.3.4.线程1的功能就是输出1,线程2的功能就是输出2,以此类推.... ...

  3. Google 面试题和详解

    Google的面试题在刁钻古怪方面相当出名,甚至已经有些被神化的味道.这个话题已经探讨过很多次,而科技博客 BusinessInsider这两天先是贴出15道Google面试题并一一给出了答案,其中不 ...

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

    具体题目如下: 有四个线程1.2.3.4, 线程1的功能就是输出1,线程2的功能就是输出2, 以此类推.........  现在有四个文件A B C D, 初始都为空.现要让四个文件呈如下格式: A: ...

  5. Google面试题之100层仍两个棋子

    一道Google面试题,题目如下:"有一个100层高的大厦,你手中有两个相同的玻璃围棋子.从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层 ...

  6. Google面试题:找几百亿数据的中值

    Google面试题:找几百亿数据的中值 http://blog.csdn.net/jiyanfeng1/article/details/8088237 有几百亿的整数,分布的存储到几百台通过网络连接的 ...

  7. google面试题,生男生女比例?

    Google面试题: 在一个重男轻女的国家里,每个家庭都想生男孩,如果他们生的孩子是女孩,就再生一个,直到生下的是男孩为止,这样的国家,男女比例会是多少? 答案:1:1 分析:  出生男女概率是50% ...

  8. 扔玻璃球 [ Google面试题 ]

    这是一道 Google 面试题,考察的是对于 粗调 和 精调 工程思维 对于扔玻璃球国内也叫扔鸡蛋. ta不用您有什么基础,只需要一个基本工程思维. 粗调和精调,这个已是统计学里最优法,所以不用担心复 ...

  9. 线程间怎么交换数据_2 万字长文详解 10 大多线程面试题|原力计划

    作者 | ZZZhonngger 责编 | 伍杏玲 出品 | CSDN博客 Volatile相关 1.请谈谈你对 volatile 的理解 答:volatile 是 Java 虚拟机提供的轻量级的同步 ...

最新文章

  1. 游戏风格化角色创建入门指南视频教程
  2. 51 nod 机器人走方格
  3. python在linux下安装方法(解决旧版本冲突)
  4. Flask与Ajax
  5. php session写入数据库_php session 写入数据库,phpsession
  6. ThinkPHP---RBAC
  7. canvas基础之旅
  8. MTK 驱动(85)----RPMB key introduction
  9. qt执行命令行失败_QT中QProcess调用命令行的痛苦经历
  10. http缓存协议详解
  11. spark MetaException(message:Version information not found in metastore. )
  12. Take it easy
  13. 备战数学建模22-数学建模论文写作规范总结
  14. 正则表达式re中的group含义
  15. 一个简单的静态网页制作(html+css)
  16. 三星s6系统更新无法连接网络连接服务器,三星手机连接无线网络上不了网是怎么回事...
  17. SuperMap iDesktop 8C 空间分析
  18. 剖析Apple Pay 它与支付宝究竟暧昧什么?
  19. 房多多,没有拼多多的命
  20. 单片机要直接烧录程序,要如何做?

热门文章

  1. spring技术的通俗理解
  2. MSP432---Timer_A定时器详解
  3. 计算正整数n中的第k位数字
  4. 8.Unity经验:TimeLine 制作过场动画
  5. 有没有手机版_将彩虹“锁”在后盖中的手机你见过吗?vivo X30虹影版正式开售...
  6. 也谈货币需求与利率的关系
  7. 飞剪程序、追剪程序plc程序伺服程序
  8. 层次聚类算法(hierarchial cluster)
  9. Redis之GeoHash算法
  10. python 小游戏--猜拳游戏