• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ivy-jie

            progress ...

            C++博客 首頁 新隨筆 聯系 聚合 管理
              9 Posts :: 41 Stories :: 6 Comments :: 0 Trackbacks

            在VC6下做的,在LINUX下,將臨界換成互斥就OK了。
            題目如下:
            啟動4個線程,向4個文件A,B,C,D里寫入數據,每個線程只能寫一個值。
            線程1:只寫1
            線程2:只寫2
            線程3:只寫3
            線程4:只寫4
            4個文件A,B,C,D。
            程序運行起來,4個文件的寫入結果如下:
            A:12341234。。。。
            B:23412341。。。。
            C:34123412。。。。
            D:41234123。。。。

            // Multithread.cpp : Defines the entry point for the console application.
            //

            #include "stdafx.h"
            #include <iostream>
            #include <windows.h>
            struct FILEINFO
            {
              int curnumber;//寫入的當前數據
              char filename[2];//文件名
              CRITICAL_SECTION cs;//臨界
             
              FILEINFO()
              {
                curnumber = 0;
             InitializeCriticalSection(&cs);
             memset(filename,0,2);
              }
            };

            FILEINFO *pFileInfo =0;
            const int MAXFILESIZE=4;
            char szfilename[]="ABCD";
            /////線程函數////////////////
            DWORD WINAPI twritefile(LPVOID parm)
            {
              int number =(int) parm;
              int nIndex = number-1;//保證線程i從文件i-1開始寫
              FILE *fp;
              char szbuf[2];
              sprintf(szbuf,"%d",number);
              bool isfirst = true;
              char sztmp[16]={0};//用來保存文件名

              while(true)
              {
                if(nIndex ==MAXFILESIZE)
               nIndex = 0;
               EnterCriticalSection(&pFileInfo[nIndex].cs);
               if((number-pFileInfo[nIndex].curnumber)!=1 && !isfirst)
              {
                 LeaveCriticalSection(&pFileInfo[nIndex].cs);
                 nIndex++;
                 continue;
               }
                sprintf(sztmp,"%s",pFileInfo[nIndex].filename);
               fp = fopen(sztmp,"a+b");
               if(fp!=0)
              {
                fwrite(szbuf,1,1,fp);
                fclose(fp);
                if(number==MAXFILESIZE)  //當為第4個線程時,文件結構的curnumber設置為0;否則,設置為線程ID
                  pFileInfo[nIndex].curnumber=0;
               else
                  pFileInfo[nIndex].curnumber = number;
              isfirst=false;
             }
              LeaveCriticalSection(&pFileInfo[nIndex].cs);
              nIndex++;
              }
            }

              int main(int argc, char* argv[])
            {
               pFileInfo = new FILEINFO[MAXFILESIZE];
               DWORD TID;

               for(int nIndex =0;nIndex<MAXFILESIZE;nIndex++)
              {
                 pFileInfo[nIndex].filename[0] = szfilename[nIndex];
              }
              for(nIndex =1;nIndex<=MAXFILESIZE;nIndex++)
             {
                CreateThread(NULL,0,twritefile,(void*)nIndex,0,&TID);
             }
             while(1)
              Sleep(100000);

            }

            posted on 2009-06-11 23:55 ivy-jie 閱讀(1373) 評論(0)  編輯 收藏 引用 所屬分類: MFC
            久久天堂AV综合合色蜜桃网 | 日韩一区二区三区视频久久| 91亚洲国产成人久久精品| 久久久久国产精品嫩草影院 | 久久精品欧美日韩精品| 热久久这里只有精品| 7777久久久国产精品消防器材 | 亚洲av伊人久久综合密臀性色| 伊人久久免费视频| 日本久久中文字幕| 欧美午夜精品久久久久免费视| 久久精品国产精品青草| 亚洲精品乱码久久久久久久久久久久| 精产国品久久一二三产区区别| 久久久久亚洲AV成人网人人网站 | 亚洲精品成人久久久| 99久久精品九九亚洲精品| 日批日出水久久亚洲精品tv| 97久久久精品综合88久久| 久久亚洲AV成人无码国产| 国产午夜电影久久| 亚洲精品无码久久千人斩| 91精品国产91久久综合| 久久天天躁夜夜躁狠狠| 久久人人爽人人爽人人片AV东京热| 久久精品人人做人人爽97| 久久精品国产日本波多野结衣| 国产成人精品久久亚洲高清不卡 | 日韩精品久久无码人妻中文字幕 | 久久精品综合一区二区三区| 国内精品久久久久影院日本| 久久青青草原亚洲av无码app | 国产精品成人无码久久久久久| 久久精品欧美日韩精品| 久久婷婷五月综合97色直播| 日批日出水久久亚洲精品tv| 久久久久人妻精品一区三寸蜜桃| 99久久国产综合精品网成人影院| 久久精品无码一区二区三区| 久久精品人人槡人妻人人玩AV| 久久精品中文字幕无码绿巨人|