把握命运,追逐梦想

对自己所做的事要有兴趣,同时还要能够坚持不懈

统计

留言簿(1)

阅读排行榜

评论排行榜

同步访问中的读写者问题(使用线程关键域)

#include <windows.h>
#include 
<stdlib.h>
#include 
<time.h>
#include 
<stdio.h>
struct CRITICAL_REGION
{
public:
    CRITICAL_SECTION cs;
    
int gData;
}
;
DWORD WINAPI writer(LPVOID cr);
DWORD WINAPI reader(LPVOID cr);


int main(int argc,char* argv[])
{
    DWORD targetThreadID;
    HANDLE writerThread;
    HANDLE readerThread;
    CRITICAL_REGION cr;
    cr.gData
=0;
    InitializeCriticalSection(
&(cr.cs));
    writerThread 
=CreateThread(NULL,0,writer,&cr,0,&targetThreadID);
    CloseHandle(writerThread);
    readerThread 
=CreateThread(NULL,0,reader,&cr,0,&targetThreadID);    
    CloseHandle(readerThread);
    Sleep(
10000);
    printf(
"end");
    
return 0;
}


DWORD WINAPI writer(LPVOID cr)
{
    Sleep(
1000);
    DWORD result 
= 0;
    
int n = 1;
    ExitProcess(
0);

    
while(n<=10)
    
{
        EnterCriticalSection(
&((CRITICAL_REGION*)cr)->cs);
        
if(((CRITICAL_REGION*)cr)->gData==0)
        
{
            ((CRITICAL_REGION
*)cr)->gData = n;
            printf(
"gData is %d\n",((CRITICAL_REGION*)cr)->gData);
            n
++;
        }

        LeaveCriticalSection(
&(((CRITICAL_REGION*)cr)->cs));
        Sleep(
100);

    }

    
return result;
}
;

DWORD WINAPI reader(LPVOID cr)
{
    DWORD result 
=0;
    
char u[6];
    
int n = 1;
    
while(n<=10)
    
{
        EnterCriticalSection(
&((CRITICAL_REGION*)cr)->cs);
        
if(((CRITICAL_REGION*)cr)->gData!=0)
        
{
            ((CRITICAL_REGION
*)cr)->gData = 0;
            n
++;
            printf(
"gData is taken away\n");
        }

        LeaveCriticalSection(
&(((CRITICAL_REGION*)cr)->cs));
        Sleep(
50);

    }

    DeleteCriticalSection( 
&(((CRITICAL_REGION*)cr)->cs)); 
    gets(u);
    
return result;
}
;

posted on 2009-08-12 18:24 把握命运 阅读(227) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理